@gxp-dev/mod-ui 2.0.0 → 2.0.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/.storybook/preview.ts +7 -0
- package/README.md +6 -6
- package/dist/_virtual/_plugin-vue_export-helper.js +10 -0
- package/dist/_virtual/_plugin-vue_export-helper.js.map +1 -0
- package/dist/action.d.ts +4 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +9 -0
- package/dist/action.js.map +1 -0
- package/dist/adapters/fieldTypeMap.d.ts.map +1 -1
- package/dist/adapters/fieldTypeMap.js +4 -8
- package/dist/adapters/fieldTypeMap.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/boolean.d.ts +5 -0
- package/dist/boolean.d.ts.map +1 -0
- package/dist/boolean.js +11 -0
- package/dist/boolean.js.map +1 -0
- package/dist/builder.d.ts +9 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +19 -0
- package/dist/builder.js.map +1 -0
- package/dist/cards.d.ts +8 -0
- package/dist/cards.d.ts.map +1 -0
- package/dist/cards.js +17 -0
- package/dist/cards.js.map +1 -0
- package/dist/code.d.ts +6 -0
- package/dist/code.d.ts.map +1 -0
- package/dist/code.js +13 -0
- package/dist/code.js.map +1 -0
- package/dist/components/compositions/cards/CardListCard.vue.d.ts +30 -0
- package/dist/components/compositions/cards/CardListCard.vue.d.ts.map +1 -0
- package/dist/components/compositions/cards/CardListCard.vue.js +122 -2
- package/dist/components/compositions/cards/CardListCard.vue.js.map +1 -1
- package/dist/components/compositions/cards/CardListCard.vue2.js +2 -122
- package/dist/components/compositions/cards/CardListCard.vue2.js.map +1 -1
- package/dist/components/compositions/cards/DataTableCard.vue.d.ts +58 -0
- package/dist/components/compositions/cards/DataTableCard.vue.d.ts.map +1 -0
- package/dist/components/compositions/cards/DataTableCard.vue.js +387 -2
- package/dist/components/compositions/cards/DataTableCard.vue.js.map +1 -1
- package/dist/components/compositions/cards/DataTableCard.vue2.js +2 -387
- package/dist/components/compositions/cards/DataTableCard.vue2.js.map +1 -1
- package/dist/components/compositions/cards/ElementDisplayCard.vue.d.ts +16 -0
- package/dist/components/compositions/cards/ElementDisplayCard.vue.d.ts.map +1 -0
- package/dist/components/compositions/cards/ElementDisplayCard.vue.js +64 -2
- package/dist/components/compositions/cards/ElementDisplayCard.vue.js.map +1 -1
- package/dist/components/compositions/cards/ElementDisplayCard.vue2.js +2 -64
- package/dist/components/compositions/cards/ElementDisplayCard.vue2.js.map +1 -1
- package/dist/components/compositions/cards/ElementListCard.vue.d.ts +22 -0
- package/dist/components/compositions/cards/ElementListCard.vue.d.ts.map +1 -0
- package/dist/components/compositions/cards/ElementListCard.vue.js +92 -2
- package/dist/components/compositions/cards/ElementListCard.vue.js.map +1 -1
- package/dist/components/compositions/cards/ElementListCard.vue2.js +2 -92
- package/dist/components/compositions/cards/ElementListCard.vue2.js.map +1 -1
- package/dist/components/compositions/cards/GridViewCard.vue.d.ts +35 -0
- package/dist/components/compositions/cards/GridViewCard.vue.d.ts.map +1 -0
- package/dist/components/compositions/cards/GridViewCard.vue.js +128 -2
- package/dist/components/compositions/cards/GridViewCard.vue.js.map +1 -1
- package/dist/components/compositions/cards/GridViewCard.vue2.js +2 -128
- package/dist/components/compositions/cards/GridViewCard.vue2.js.map +1 -1
- package/dist/components/compositions/cards/InfoCard.vue.d.ts +24 -0
- package/dist/components/compositions/cards/InfoCard.vue.d.ts.map +1 -0
- package/dist/components/compositions/cards/InfoCard.vue.js +183 -2
- package/dist/components/compositions/cards/InfoCard.vue.js.map +1 -1
- package/dist/components/compositions/cards/InfoCard.vue2.js +2 -183
- package/dist/components/compositions/cards/InfoCard.vue2.js.map +1 -1
- package/dist/components/compositions/cards/TabListCard.vue.d.ts +36 -0
- package/dist/components/compositions/cards/TabListCard.vue.d.ts.map +1 -0
- package/dist/components/compositions/cards/TabListCard.vue.js +124 -2
- package/dist/components/compositions/cards/TabListCard.vue.js.map +1 -1
- package/dist/components/compositions/cards/TabListCard.vue2.js +2 -124
- package/dist/components/compositions/cards/TabListCard.vue2.js.map +1 -1
- package/dist/components/compositions/elements/action/ButtonAction.vue.d.ts +42 -0
- package/dist/components/compositions/elements/action/ButtonAction.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/action/ButtonAction.vue.js +157 -2
- package/dist/components/compositions/elements/action/ButtonAction.vue.js.map +1 -1
- package/dist/components/compositions/elements/action/ButtonAction.vue2.js +2 -157
- package/dist/components/compositions/elements/action/ButtonAction.vue2.js.map +1 -1
- package/dist/components/compositions/elements/action/ButtonGroupAction.vue.d.ts +46 -0
- package/dist/components/compositions/elements/action/ButtonGroupAction.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/action/ButtonGroupAction.vue.js +66 -2
- package/dist/components/compositions/elements/action/ButtonGroupAction.vue.js.map +1 -1
- package/dist/components/compositions/elements/action/ButtonGroupAction.vue2.js +2 -66
- package/dist/components/compositions/elements/action/ButtonGroupAction.vue2.js.map +1 -1
- package/dist/components/compositions/elements/action/LinkAction.vue.d.ts +30 -0
- package/dist/components/compositions/elements/action/LinkAction.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/action/LinkAction.vue.js +55 -2
- package/dist/components/compositions/elements/action/LinkAction.vue.js.map +1 -1
- package/dist/components/compositions/elements/action/LinkAction.vue2.js +2 -55
- package/dist/components/compositions/elements/action/LinkAction.vue2.js.map +1 -1
- package/dist/components/compositions/elements/boolean/CheckboxBoolean.vue.d.ts +25 -0
- package/dist/components/compositions/elements/boolean/CheckboxBoolean.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/boolean/CheckboxBoolean.vue.js +68 -2
- package/dist/components/compositions/elements/boolean/CheckboxBoolean.vue.js.map +1 -1
- package/dist/components/compositions/elements/boolean/CheckboxBoolean.vue2.js +2 -68
- package/dist/components/compositions/elements/boolean/CheckboxBoolean.vue2.js.map +1 -1
- package/dist/components/compositions/elements/boolean/IconToggleBoolean.vue.d.ts +29 -0
- package/dist/components/compositions/elements/boolean/IconToggleBoolean.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/boolean/IconToggleBoolean.vue.js +75 -2
- package/dist/components/compositions/elements/boolean/IconToggleBoolean.vue.js.map +1 -1
- package/dist/components/compositions/elements/boolean/IconToggleBoolean.vue2.js +2 -75
- package/dist/components/compositions/elements/boolean/IconToggleBoolean.vue2.js.map +1 -1
- package/dist/components/compositions/elements/boolean/RadioBoolean.vue.d.ts +33 -0
- package/dist/components/compositions/elements/boolean/RadioBoolean.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/boolean/RadioBoolean.vue.js +91 -2
- package/dist/components/compositions/elements/boolean/RadioBoolean.vue.js.map +1 -1
- package/dist/components/compositions/elements/boolean/RadioBoolean.vue2.js +2 -91
- package/dist/components/compositions/elements/boolean/RadioBoolean.vue2.js.map +1 -1
- package/dist/components/compositions/elements/boolean/SwitchBoolean.vue.d.ts +29 -0
- package/dist/components/compositions/elements/boolean/SwitchBoolean.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/boolean/SwitchBoolean.vue.js +77 -2
- package/dist/components/compositions/elements/boolean/SwitchBoolean.vue.js.map +1 -1
- package/dist/components/compositions/elements/boolean/SwitchBoolean.vue2.js +2 -77
- package/dist/components/compositions/elements/boolean/SwitchBoolean.vue2.js.map +1 -1
- package/dist/components/compositions/elements/builder/DependencyListBuilder.vue.d.ts +29 -0
- package/dist/components/compositions/elements/builder/DependencyListBuilder.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/builder/DependencyListBuilder.vue.js +666 -2
- package/dist/components/compositions/elements/builder/DependencyListBuilder.vue.js.map +1 -1
- package/dist/components/compositions/elements/builder/DependencyListBuilder.vue2.js +2 -666
- package/dist/components/compositions/elements/builder/DependencyListBuilder.vue2.js.map +1 -1
- package/dist/components/compositions/elements/builder/ElementListBuilder.vue.d.ts +29 -0
- package/dist/components/compositions/elements/builder/ElementListBuilder.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/builder/ElementListBuilder.vue.js +421 -2
- package/dist/components/compositions/elements/builder/ElementListBuilder.vue.js.map +1 -1
- package/dist/components/compositions/elements/builder/ElementListBuilder.vue2.js +2 -421
- package/dist/components/compositions/elements/builder/ElementListBuilder.vue2.js.map +1 -1
- package/dist/components/compositions/elements/builder/FormBuilder.vue.d.ts +30 -0
- package/dist/components/compositions/elements/builder/FormBuilder.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/builder/FormBuilder.vue.js +857 -2
- package/dist/components/compositions/elements/builder/FormBuilder.vue.js.map +1 -1
- package/dist/components/compositions/elements/builder/FormBuilder.vue2.js +2 -857
- package/dist/components/compositions/elements/builder/FormBuilder.vue2.js.map +1 -1
- package/dist/components/compositions/elements/builder/GridBuilder.vue.d.ts +37 -0
- package/dist/components/compositions/elements/builder/GridBuilder.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/builder/GridBuilder.vue.js +452 -2
- package/dist/components/compositions/elements/builder/GridBuilder.vue.js.map +1 -1
- package/dist/components/compositions/elements/builder/GridBuilder.vue2.js +2 -452
- package/dist/components/compositions/elements/builder/GridBuilder.vue2.js.map +1 -1
- package/dist/components/compositions/elements/builder/ObjectBuilder.vue.d.ts +33 -0
- package/dist/components/compositions/elements/builder/ObjectBuilder.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/builder/ObjectBuilder.vue.js +511 -2
- package/dist/components/compositions/elements/builder/ObjectBuilder.vue.js.map +1 -1
- package/dist/components/compositions/elements/builder/ObjectBuilder.vue2.js +2 -511
- package/dist/components/compositions/elements/builder/ObjectBuilder.vue2.js.map +1 -1
- package/dist/components/compositions/elements/builder/PresetBuilder.vue.d.ts +29 -0
- package/dist/components/compositions/elements/builder/PresetBuilder.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/builder/PresetBuilder.vue.js +163 -2
- package/dist/components/compositions/elements/builder/PresetBuilder.vue.js.map +1 -1
- package/dist/components/compositions/elements/builder/PresetBuilder.vue2.js +2 -163
- package/dist/components/compositions/elements/builder/PresetBuilder.vue2.js.map +1 -1
- package/dist/components/compositions/elements/builder/QuizBuilder.vue.d.ts +34 -0
- package/dist/components/compositions/elements/builder/QuizBuilder.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/builder/QuizBuilder.vue.js +591 -2
- package/dist/components/compositions/elements/builder/QuizBuilder.vue.js.map +1 -1
- package/dist/components/compositions/elements/builder/QuizBuilder.vue2.js +2 -591
- package/dist/components/compositions/elements/builder/QuizBuilder.vue2.js.map +1 -1
- package/dist/components/compositions/elements/builder/ReactiveCanvasBuilder.vue.d.ts +29 -0
- package/dist/components/compositions/elements/builder/ReactiveCanvasBuilder.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/builder/ReactiveCanvasBuilder.vue.js +580 -2
- package/dist/components/compositions/elements/builder/ReactiveCanvasBuilder.vue.js.map +1 -1
- package/dist/components/compositions/elements/builder/ReactiveCanvasBuilder.vue2.js +2 -580
- package/dist/components/compositions/elements/builder/ReactiveCanvasBuilder.vue2.js.map +1 -1
- package/dist/components/compositions/elements/card/ListCard.vue.d.ts +21 -0
- package/dist/components/compositions/elements/card/ListCard.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/code/BuildStatus.vue.d.ts +43 -0
- package/dist/components/compositions/elements/code/BuildStatus.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/code/BuildStatus.vue.js +246 -2
- package/dist/components/compositions/elements/code/BuildStatus.vue.js.map +1 -1
- package/dist/components/compositions/elements/code/BuildStatus.vue2.js +2 -246
- package/dist/components/compositions/elements/code/BuildStatus.vue2.js.map +1 -1
- package/dist/components/compositions/elements/code/ChatMessage.vue.d.ts +39 -0
- package/dist/components/compositions/elements/code/ChatMessage.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/code/ChatMessage.vue.js +267 -2
- package/dist/components/compositions/elements/code/ChatMessage.vue.js.map +1 -1
- package/dist/components/compositions/elements/code/ChatMessage.vue2.js +2 -267
- package/dist/components/compositions/elements/code/ChatMessage.vue2.js.map +1 -1
- package/dist/components/compositions/elements/code/FileTree.vue.d.ts +42 -0
- package/dist/components/compositions/elements/code/FileTree.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/code/FileTree.vue.js +251 -2
- package/dist/components/compositions/elements/code/FileTree.vue.js.map +1 -1
- package/dist/components/compositions/elements/code/FileTree.vue2.js +2 -251
- package/dist/components/compositions/elements/code/FileTree.vue2.js.map +1 -1
- package/dist/components/compositions/elements/code/GitCodeEditor.vue.d.ts +54 -0
- package/dist/components/compositions/elements/code/GitCodeEditor.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/code/GitCodeEditor.vue.js +273 -2
- package/dist/components/compositions/elements/code/GitCodeEditor.vue.js.map +1 -1
- package/dist/components/compositions/elements/code/GitCodeEditor.vue2.js +2 -273
- package/dist/components/compositions/elements/code/GitCodeEditor.vue2.js.map +1 -1
- package/dist/components/compositions/elements/code/PullRequestsList.vue.d.ts +46 -0
- package/dist/components/compositions/elements/code/PullRequestsList.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/code/PullRequestsList.vue.js +303 -2
- package/dist/components/compositions/elements/code/PullRequestsList.vue.js.map +1 -1
- package/dist/components/compositions/elements/code/PullRequestsList.vue2.js +2 -303
- package/dist/components/compositions/elements/code/PullRequestsList.vue2.js.map +1 -1
- package/dist/components/compositions/elements/configuration-block/DialogBlock.vue.d.ts +17 -0
- package/dist/components/compositions/elements/configuration-block/DialogBlock.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/configuration-block/DialogBlock.vue.js +101 -2
- package/dist/components/compositions/elements/configuration-block/DialogBlock.vue.js.map +1 -1
- package/dist/components/compositions/elements/configuration-block/DialogBlock.vue2.js +2 -101
- package/dist/components/compositions/elements/configuration-block/DialogBlock.vue2.js.map +1 -1
- package/dist/components/compositions/elements/configuration-block/ElementsBlock.vue.d.ts +20 -0
- package/dist/components/compositions/elements/configuration-block/ElementsBlock.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/configuration-block/ElementsBlock.vue.js +33 -2
- package/dist/components/compositions/elements/configuration-block/ElementsBlock.vue.js.map +1 -1
- package/dist/components/compositions/elements/configuration-block/ElementsBlock.vue2.js +2 -33
- package/dist/components/compositions/elements/configuration-block/ElementsBlock.vue2.js.map +1 -1
- package/dist/components/compositions/elements/configuration-block/ModalBlock.vue.d.ts +17 -0
- package/dist/components/compositions/elements/configuration-block/ModalBlock.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/configuration-block/ModalBlock.vue.js +103 -2
- package/dist/components/compositions/elements/configuration-block/ModalBlock.vue.js.map +1 -1
- package/dist/components/compositions/elements/configuration-block/ModalBlock.vue2.js +2 -103
- package/dist/components/compositions/elements/configuration-block/ModalBlock.vue2.js.map +1 -1
- package/dist/components/compositions/elements/configuration-block/RepeatableBlock.vue.d.ts +29 -0
- package/dist/components/compositions/elements/configuration-block/RepeatableBlock.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/configuration-block/RepeatableBlock.vue.js +172 -2
- package/dist/components/compositions/elements/configuration-block/RepeatableBlock.vue.js.map +1 -1
- package/dist/components/compositions/elements/configuration-block/RepeatableBlock.vue2.js +2 -140
- package/dist/components/compositions/elements/configuration-block/RepeatableBlock.vue2.js.map +1 -1
- package/dist/components/compositions/elements/configuration-block/RepeatableRow.vue.d.ts +12 -0
- package/dist/components/compositions/elements/configuration-block/RepeatableRow.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/configuration-block/RepeatableRow.vue.js +5 -0
- package/dist/components/compositions/elements/configuration-block/RepeatableRow.vue.js.map +1 -0
- package/dist/components/compositions/elements/configuration-block/RepeatableRow.vue2.js +25 -0
- package/dist/components/compositions/elements/configuration-block/RepeatableRow.vue2.js.map +1 -0
- package/dist/components/compositions/elements/display/BannerDisplay.vue.d.ts +13 -0
- package/dist/components/compositions/elements/display/BannerDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/BannerDisplay.vue.js +63 -2
- package/dist/components/compositions/elements/display/BannerDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/BannerDisplay.vue2.js +2 -63
- package/dist/components/compositions/elements/display/BannerDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/BarcodeDisplay.vue.d.ts +12 -0
- package/dist/components/compositions/elements/display/BarcodeDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/BarcodeDisplay.vue.js +52 -2
- package/dist/components/compositions/elements/display/BarcodeDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/BarcodeDisplay.vue2.js +2 -52
- package/dist/components/compositions/elements/display/BarcodeDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/CarouselDisplay.vue.d.ts +27 -0
- package/dist/components/compositions/elements/display/CarouselDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/CarouselDisplay.vue.js +144 -2
- package/dist/components/compositions/elements/display/CarouselDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/CarouselDisplay.vue2.js +2 -144
- package/dist/components/compositions/elements/display/CarouselDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/ChartDisplay.vue.d.ts +17 -0
- package/dist/components/compositions/elements/display/ChartDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/ChartDisplay.vue.js +78 -2
- package/dist/components/compositions/elements/display/ChartDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/ChartDisplay.vue2.js +2 -78
- package/dist/components/compositions/elements/display/ChartDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/HtmlDisplay.vue.d.ts +7 -0
- package/dist/components/compositions/elements/display/HtmlDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/HtmlDisplay.vue.js +20 -2
- package/dist/components/compositions/elements/display/HtmlDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/HtmlDisplay.vue2.js +2 -20
- package/dist/components/compositions/elements/display/HtmlDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/IconDisplay.vue.d.ts +10 -0
- package/dist/components/compositions/elements/display/IconDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/IconDisplay.vue.js +55 -2
- package/dist/components/compositions/elements/display/IconDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/IconDisplay.vue2.js +2 -55
- package/dist/components/compositions/elements/display/IconDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/IframeDisplay.vue.d.ts +11 -0
- package/dist/components/compositions/elements/display/IframeDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/IframeDisplay.vue.js +32 -2
- package/dist/components/compositions/elements/display/IframeDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/IframeDisplay.vue2.js +2 -32
- package/dist/components/compositions/elements/display/IframeDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/ImageDisplay.vue.d.ts +8 -0
- package/dist/components/compositions/elements/display/ImageDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/ImageDisplay.vue.js +35 -2
- package/dist/components/compositions/elements/display/ImageDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/ImageDisplay.vue2.js +2 -35
- package/dist/components/compositions/elements/display/ImageDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/MarkdownDisplay.vue.d.ts +7 -0
- package/dist/components/compositions/elements/display/MarkdownDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/MarkdownDisplay.vue.js +39 -2
- package/dist/components/compositions/elements/display/MarkdownDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/MarkdownDisplay.vue2.js +2 -39
- package/dist/components/compositions/elements/display/MarkdownDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/ProgressBarDisplay.vue.d.ts +11 -0
- package/dist/components/compositions/elements/display/ProgressBarDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/ProgressBarDisplay.vue.js +42 -2
- package/dist/components/compositions/elements/display/ProgressBarDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/ProgressBarDisplay.vue2.js +2 -42
- package/dist/components/compositions/elements/display/ProgressBarDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/QrCodeDisplay.vue.d.ts +9 -0
- package/dist/components/compositions/elements/display/QrCodeDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/QrCodeDisplay.vue.js +46 -2
- package/dist/components/compositions/elements/display/QrCodeDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/QrCodeDisplay.vue2.js +2 -46
- package/dist/components/compositions/elements/display/QrCodeDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/ReactiveCanvasDisplay.vue.d.ts +7 -0
- package/dist/components/compositions/elements/display/ReactiveCanvasDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/ReactiveCanvasDisplay.vue.js +64 -2
- package/dist/components/compositions/elements/display/ReactiveCanvasDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/ReactiveCanvasDisplay.vue2.js +2 -64
- package/dist/components/compositions/elements/display/ReactiveCanvasDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/SpriteDisplay.vue.d.ts +7 -0
- package/dist/components/compositions/elements/display/SpriteDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/SpriteDisplay.vue.js +64 -2
- package/dist/components/compositions/elements/display/SpriteDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/SpriteDisplay.vue2.js +2 -64
- package/dist/components/compositions/elements/display/SpriteDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/TypeDisplay.vue.d.ts +11 -0
- package/dist/components/compositions/elements/display/TypeDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/TypeDisplay.vue.js +42 -2
- package/dist/components/compositions/elements/display/TypeDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/TypeDisplay.vue2.js +2 -42
- package/dist/components/compositions/elements/display/TypeDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/display/VideoPlayerDisplay.vue.d.ts +10 -0
- package/dist/components/compositions/elements/display/VideoPlayerDisplay.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/display/VideoPlayerDisplay.vue.js +33 -2
- package/dist/components/compositions/elements/display/VideoPlayerDisplay.vue.js.map +1 -1
- package/dist/components/compositions/elements/display/VideoPlayerDisplay.vue2.js +2 -33
- package/dist/components/compositions/elements/display/VideoPlayerDisplay.vue2.js.map +1 -1
- package/dist/components/compositions/elements/editor/CodeEditor.vue.d.ts +33 -0
- package/dist/components/compositions/elements/editor/CodeEditor.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/editor/CodeEditor.vue.js +5 -2
- package/dist/components/compositions/elements/editor/CodeEditor.vue.js.map +1 -1
- package/dist/components/compositions/elements/editor/CodeEditor.vue2.js +211 -53
- package/dist/components/compositions/elements/editor/CodeEditor.vue2.js.map +1 -1
- package/dist/components/compositions/elements/editor/HtmlEditor.vue.d.ts +24 -0
- package/dist/components/compositions/elements/editor/HtmlEditor.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/editor/HtmlEditor.vue.js +5 -2
- package/dist/components/compositions/elements/editor/HtmlEditor.vue.js.map +1 -1
- package/dist/components/compositions/elements/editor/HtmlEditor.vue2.js +1333 -50
- package/dist/components/compositions/elements/editor/HtmlEditor.vue2.js.map +1 -1
- package/dist/components/compositions/elements/editor/ImageEditor.vue.d.ts +24 -0
- package/dist/components/compositions/elements/editor/ImageEditor.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/editor/ImageEditor.vue.js +67 -2
- package/dist/components/compositions/elements/editor/ImageEditor.vue.js.map +1 -1
- package/dist/components/compositions/elements/editor/ImageEditor.vue2.js +2 -67
- package/dist/components/compositions/elements/editor/ImageEditor.vue2.js.map +1 -1
- package/dist/components/compositions/elements/editor/MarkdownEditor.vue.d.ts +28 -0
- package/dist/components/compositions/elements/editor/MarkdownEditor.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/editor/MarkdownEditor.vue.js +82 -2
- package/dist/components/compositions/elements/editor/MarkdownEditor.vue.js.map +1 -1
- package/dist/components/compositions/elements/editor/MarkdownEditor.vue2.js +2 -82
- package/dist/components/compositions/elements/editor/MarkdownEditor.vue2.js.map +1 -1
- package/dist/components/compositions/elements/editor/RichTextEditor.vue.d.ts +26 -0
- package/dist/components/compositions/elements/editor/RichTextEditor.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/editor/RichTextEditor.vue.js +262 -2
- package/dist/components/compositions/elements/editor/RichTextEditor.vue.js.map +1 -1
- package/dist/components/compositions/elements/editor/RichTextEditor.vue2.js +2 -262
- package/dist/components/compositions/elements/editor/RichTextEditor.vue2.js.map +1 -1
- package/dist/components/compositions/elements/file/AssetPickerFile.vue.d.ts +47 -0
- package/dist/components/compositions/elements/file/AssetPickerFile.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/file/AssetPickerFile.vue.js +293 -2
- package/dist/components/compositions/elements/file/AssetPickerFile.vue.js.map +1 -1
- package/dist/components/compositions/elements/file/AssetPickerFile.vue2.js +2 -293
- package/dist/components/compositions/elements/file/AssetPickerFile.vue2.js.map +1 -1
- package/dist/components/compositions/elements/file/DropzoneFile.vue.d.ts +33 -0
- package/dist/components/compositions/elements/file/DropzoneFile.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/file/DropzoneFile.vue.js +171 -2
- package/dist/components/compositions/elements/file/DropzoneFile.vue.js.map +1 -1
- package/dist/components/compositions/elements/file/DropzoneFile.vue2.js +2 -171
- package/dist/components/compositions/elements/file/DropzoneFile.vue2.js.map +1 -1
- package/dist/components/compositions/elements/file/UploadFile.vue.d.ts +33 -0
- package/dist/components/compositions/elements/file/UploadFile.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/file/UploadFile.vue.js +149 -2
- package/dist/components/compositions/elements/file/UploadFile.vue.js.map +1 -1
- package/dist/components/compositions/elements/file/UploadFile.vue2.js +2 -149
- package/dist/components/compositions/elements/file/UploadFile.vue2.js.map +1 -1
- package/dist/components/compositions/elements/input/BarcodeScannerInput.vue.d.ts +48 -0
- package/dist/components/compositions/elements/input/BarcodeScannerInput.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/input/BarcodeScannerInput.vue.js +166 -2
- package/dist/components/compositions/elements/input/BarcodeScannerInput.vue.js.map +1 -1
- package/dist/components/compositions/elements/input/BarcodeScannerInput.vue2.js +2 -166
- package/dist/components/compositions/elements/input/BarcodeScannerInput.vue2.js.map +1 -1
- package/dist/components/compositions/elements/input/EmailInput.vue.d.ts +48 -0
- package/dist/components/compositions/elements/input/EmailInput.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/input/EmailInput.vue.js +62 -2
- package/dist/components/compositions/elements/input/EmailInput.vue.js.map +1 -1
- package/dist/components/compositions/elements/input/EmailInput.vue2.js +2 -62
- package/dist/components/compositions/elements/input/EmailInput.vue2.js.map +1 -1
- package/dist/components/compositions/elements/input/NumberInput.vue.d.ts +49 -0
- package/dist/components/compositions/elements/input/NumberInput.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/input/NumberInput.vue.js +73 -2
- package/dist/components/compositions/elements/input/NumberInput.vue.js.map +1 -1
- package/dist/components/compositions/elements/input/NumberInput.vue2.js +2 -73
- package/dist/components/compositions/elements/input/NumberInput.vue2.js.map +1 -1
- package/dist/components/compositions/elements/input/PasswordInput.vue.d.ts +49 -0
- package/dist/components/compositions/elements/input/PasswordInput.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/input/PasswordInput.vue.js +98 -2
- package/dist/components/compositions/elements/input/PasswordInput.vue.js.map +1 -1
- package/dist/components/compositions/elements/input/PasswordInput.vue2.js +2 -98
- package/dist/components/compositions/elements/input/PasswordInput.vue2.js.map +1 -1
- package/dist/components/compositions/elements/input/RangeSliderInput.vue.d.ts +31 -0
- package/dist/components/compositions/elements/input/RangeSliderInput.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/input/RangeSliderInput.vue.js +69 -2
- package/dist/components/compositions/elements/input/RangeSliderInput.vue.js.map +1 -1
- package/dist/components/compositions/elements/input/RangeSliderInput.vue2.js +2 -69
- package/dist/components/compositions/elements/input/RangeSliderInput.vue2.js.map +1 -1
- package/dist/components/compositions/elements/input/SearchInput.vue.d.ts +48 -0
- package/dist/components/compositions/elements/input/SearchInput.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/input/SearchInput.vue.js +69 -2
- package/dist/components/compositions/elements/input/SearchInput.vue.js.map +1 -1
- package/dist/components/compositions/elements/input/SearchInput.vue2.js +2 -69
- package/dist/components/compositions/elements/input/SearchInput.vue2.js.map +1 -1
- package/dist/components/compositions/elements/input/TelInput.vue.d.ts +48 -0
- package/dist/components/compositions/elements/input/TelInput.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/input/TelInput.vue.js +62 -2
- package/dist/components/compositions/elements/input/TelInput.vue.js.map +1 -1
- package/dist/components/compositions/elements/input/TelInput.vue2.js +2 -62
- package/dist/components/compositions/elements/input/TelInput.vue2.js.map +1 -1
- package/dist/components/compositions/elements/input/TextInput.vue.d.ts +48 -0
- package/dist/components/compositions/elements/input/TextInput.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/input/TextInput.vue.js +62 -2
- package/dist/components/compositions/elements/input/TextInput.vue.js.map +1 -1
- package/dist/components/compositions/elements/input/TextInput.vue2.js +2 -62
- package/dist/components/compositions/elements/input/TextInput.vue2.js.map +1 -1
- package/dist/components/compositions/elements/input/TextareaInput.vue.d.ts +54 -0
- package/dist/components/compositions/elements/input/TextareaInput.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/input/TextareaInput.vue.js +63 -2
- package/dist/components/compositions/elements/input/TextareaInput.vue.js.map +1 -1
- package/dist/components/compositions/elements/input/TextareaInput.vue2.js +2 -63
- package/dist/components/compositions/elements/input/TextareaInput.vue2.js.map +1 -1
- package/dist/components/compositions/elements/input/UrlInput.vue.d.ts +48 -0
- package/dist/components/compositions/elements/input/UrlInput.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/input/UrlInput.vue.js +62 -2
- package/dist/components/compositions/elements/input/UrlInput.vue.js.map +1 -1
- package/dist/components/compositions/elements/input/UrlInput.vue2.js +2 -62
- package/dist/components/compositions/elements/input/UrlInput.vue2.js.map +1 -1
- package/dist/components/compositions/elements/option-select/AsyncSelectOption.vue.d.ts +44 -0
- package/dist/components/compositions/elements/option-select/AsyncSelectOption.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/option-select/AsyncSelectOption.vue.js +167 -2
- package/dist/components/compositions/elements/option-select/AsyncSelectOption.vue.js.map +1 -1
- package/dist/components/compositions/elements/option-select/AsyncSelectOption.vue2.js +2 -167
- package/dist/components/compositions/elements/option-select/AsyncSelectOption.vue2.js.map +1 -1
- package/dist/components/compositions/elements/option-select/AutoCompleteOption.vue.d.ts +31 -0
- package/dist/components/compositions/elements/option-select/AutoCompleteOption.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/option-select/AutoCompleteOption.vue.js +121 -2
- package/dist/components/compositions/elements/option-select/AutoCompleteOption.vue.js.map +1 -1
- package/dist/components/compositions/elements/option-select/AutoCompleteOption.vue2.js +2 -121
- package/dist/components/compositions/elements/option-select/AutoCompleteOption.vue2.js.map +1 -1
- package/dist/components/compositions/elements/option-select/CheckboxOption.vue.d.ts +29 -0
- package/dist/components/compositions/elements/option-select/CheckboxOption.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/option-select/CheckboxOption.vue.js +87 -2
- package/dist/components/compositions/elements/option-select/CheckboxOption.vue.js.map +1 -1
- package/dist/components/compositions/elements/option-select/CheckboxOption.vue2.js +2 -87
- package/dist/components/compositions/elements/option-select/CheckboxOption.vue2.js.map +1 -1
- package/dist/components/compositions/elements/option-select/IntegrationConnectorOption.vue.d.ts +41 -0
- package/dist/components/compositions/elements/option-select/IntegrationConnectorOption.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/option-select/IntegrationConnectorOption.vue.js +237 -2
- package/dist/components/compositions/elements/option-select/IntegrationConnectorOption.vue.js.map +1 -1
- package/dist/components/compositions/elements/option-select/IntegrationConnectorOption.vue2.js +2 -237
- package/dist/components/compositions/elements/option-select/IntegrationConnectorOption.vue2.js.map +1 -1
- package/dist/components/compositions/elements/option-select/ListOption.vue.d.ts +29 -0
- package/dist/components/compositions/elements/option-select/ListOption.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/option-select/ListOption.vue.js +89 -2
- package/dist/components/compositions/elements/option-select/ListOption.vue.js.map +1 -1
- package/dist/components/compositions/elements/option-select/ListOption.vue2.js +2 -89
- package/dist/components/compositions/elements/option-select/ListOption.vue2.js.map +1 -1
- package/dist/components/compositions/elements/option-select/PillSelectOption.vue.d.ts +28 -0
- package/dist/components/compositions/elements/option-select/PillSelectOption.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/option-select/PillSelectOption.vue.js +85 -2
- package/dist/components/compositions/elements/option-select/PillSelectOption.vue.js.map +1 -1
- package/dist/components/compositions/elements/option-select/PillSelectOption.vue2.js +2 -85
- package/dist/components/compositions/elements/option-select/PillSelectOption.vue2.js.map +1 -1
- package/dist/components/compositions/elements/option-select/RadioOption.vue.d.ts +29 -0
- package/dist/components/compositions/elements/option-select/RadioOption.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/option-select/RadioOption.vue.js +98 -2
- package/dist/components/compositions/elements/option-select/RadioOption.vue.js.map +1 -1
- package/dist/components/compositions/elements/option-select/RadioOption.vue2.js +2 -98
- package/dist/components/compositions/elements/option-select/RadioOption.vue2.js.map +1 -1
- package/dist/components/compositions/elements/option-select/SelectMultipleOption.vue.d.ts +29 -0
- package/dist/components/compositions/elements/option-select/SelectMultipleOption.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/option-select/SelectMultipleOption.vue.js +151 -2
- package/dist/components/compositions/elements/option-select/SelectMultipleOption.vue.js.map +1 -1
- package/dist/components/compositions/elements/option-select/SelectMultipleOption.vue2.js +2 -151
- package/dist/components/compositions/elements/option-select/SelectMultipleOption.vue2.js.map +1 -1
- package/dist/components/compositions/elements/option-select/SelectOption.vue.d.ts +29 -0
- package/dist/components/compositions/elements/option-select/SelectOption.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/option-select/SelectOption.vue.js +116 -2
- package/dist/components/compositions/elements/option-select/SelectOption.vue.js.map +1 -1
- package/dist/components/compositions/elements/option-select/SelectOption.vue2.js +2 -116
- package/dist/components/compositions/elements/option-select/SelectOption.vue2.js.map +1 -1
- package/dist/components/compositions/elements/picker/AsyncSelectPicker.vue.d.ts +40 -0
- package/dist/components/compositions/elements/picker/AsyncSelectPicker.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/picker/AsyncSelectPicker.vue.js +182 -2
- package/dist/components/compositions/elements/picker/AsyncSelectPicker.vue.js.map +1 -1
- package/dist/components/compositions/elements/picker/AsyncSelectPicker.vue2.js +2 -182
- package/dist/components/compositions/elements/picker/AsyncSelectPicker.vue2.js.map +1 -1
- package/dist/components/compositions/elements/picker/ColorPicker.vue.d.ts +29 -0
- package/dist/components/compositions/elements/picker/ColorPicker.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/picker/ColorPicker.vue.js +155 -2
- package/dist/components/compositions/elements/picker/ColorPicker.vue.js.map +1 -1
- package/dist/components/compositions/elements/picker/ColorPicker.vue2.js +2 -155
- package/dist/components/compositions/elements/picker/ColorPicker.vue2.js.map +1 -1
- package/dist/components/compositions/elements/picker/DataModelPicker.vue.d.ts +29 -0
- package/dist/components/compositions/elements/picker/DataModelPicker.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/picker/DataModelPicker.vue.js +104 -2
- package/dist/components/compositions/elements/picker/DataModelPicker.vue.js.map +1 -1
- package/dist/components/compositions/elements/picker/DataModelPicker.vue2.js +2 -104
- package/dist/components/compositions/elements/picker/DataModelPicker.vue2.js.map +1 -1
- package/dist/components/compositions/elements/picker/DatePicker.vue.d.ts +32 -0
- package/dist/components/compositions/elements/picker/DatePicker.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/picker/DatePicker.vue.js +140 -2
- package/dist/components/compositions/elements/picker/DatePicker.vue.js.map +1 -1
- package/dist/components/compositions/elements/picker/DatePicker.vue2.js +2 -140
- package/dist/components/compositions/elements/picker/DatePicker.vue2.js.map +1 -1
- package/dist/components/compositions/elements/picker/DateTimePicker.vue.d.ts +26 -0
- package/dist/components/compositions/elements/picker/DateTimePicker.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/picker/DateTimePicker.vue.js +171 -2
- package/dist/components/compositions/elements/picker/DateTimePicker.vue.js.map +1 -1
- package/dist/components/compositions/elements/picker/DateTimePicker.vue2.js +2 -171
- package/dist/components/compositions/elements/picker/DateTimePicker.vue2.js.map +1 -1
- package/dist/components/compositions/elements/picker/IconPicker.vue.d.ts +26 -0
- package/dist/components/compositions/elements/picker/IconPicker.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/picker/IconPicker.vue.js +190 -2
- package/dist/components/compositions/elements/picker/IconPicker.vue.js.map +1 -1
- package/dist/components/compositions/elements/picker/IconPicker.vue2.js +2 -190
- package/dist/components/compositions/elements/picker/IconPicker.vue2.js.map +1 -1
- package/dist/components/compositions/elements/picker/IconPickerInline.vue.d.ts +24 -0
- package/dist/components/compositions/elements/picker/IconPickerInline.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/{components/IconPickerInline.vue2.js → picker/IconPickerInline.vue.js} +23 -23
- package/dist/components/compositions/elements/picker/IconPickerInline.vue.js.map +1 -0
- package/dist/components/compositions/elements/picker/IconPickerInline.vue2.js +5 -0
- package/dist/components/compositions/elements/picker/IconPickerInline.vue2.js.map +1 -0
- package/dist/components/compositions/elements/picker/IntegrationConnectorPicker.vue.d.ts +41 -0
- package/dist/components/compositions/elements/picker/IntegrationConnectorPicker.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/picker/IntegrationConnectorPicker.vue.js +271 -2
- package/dist/components/compositions/elements/picker/IntegrationConnectorPicker.vue.js.map +1 -1
- package/dist/components/compositions/elements/picker/IntegrationConnectorPicker.vue2.js +2 -271
- package/dist/components/compositions/elements/picker/IntegrationConnectorPicker.vue2.js.map +1 -1
- package/dist/components/compositions/elements/picker/MapPicker.vue.d.ts +55 -0
- package/dist/components/compositions/elements/picker/MapPicker.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/picker/MapPicker.vue.js +118 -2
- package/dist/components/compositions/elements/picker/MapPicker.vue.js.map +1 -1
- package/dist/components/compositions/elements/picker/MapPicker.vue2.js +2 -118
- package/dist/components/compositions/elements/picker/MapPicker.vue2.js.map +1 -1
- package/dist/components/compositions/elements/picker/TimePicker.vue.d.ts +26 -0
- package/dist/components/compositions/elements/picker/TimePicker.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/picker/TimePicker.vue.js +106 -2
- package/dist/components/compositions/elements/picker/TimePicker.vue.js.map +1 -1
- package/dist/components/compositions/elements/picker/TimePicker.vue2.js +2 -106
- package/dist/components/compositions/elements/picker/TimePicker.vue2.js.map +1 -1
- package/dist/components/compositions/elements/picker/TimezonePicker.vue.d.ts +26 -0
- package/dist/components/compositions/elements/picker/TimezonePicker.vue.d.ts.map +1 -0
- package/dist/components/compositions/elements/picker/TimezonePicker.vue.js +124 -2
- package/dist/components/compositions/elements/picker/TimezonePicker.vue.js.map +1 -1
- package/dist/components/compositions/elements/picker/TimezonePicker.vue2.js +2 -124
- package/dist/components/compositions/elements/picker/TimezonePicker.vue2.js.map +1 -1
- package/dist/components/ui/index.d.ts +3 -3
- package/dist/components/ui/toast/index.d.ts +1 -1
- package/dist/components/ui/toast/index.js.map +1 -1
- package/dist/configuration-block.d.ts +5 -0
- package/dist/configuration-block.d.ts.map +1 -0
- package/dist/configuration-block.js +11 -0
- package/dist/configuration-block.js.map +1 -0
- package/dist/definitions/elements/PickerElement.d.ts +1 -1
- package/dist/definitions/elements/PickerElement.d.ts.map +1 -1
- package/dist/definitions/elements/PickerElement.js +3 -2
- package/dist/definitions/elements/PickerElement.js.map +1 -1
- package/dist/definitions/elements/index.d.ts +1 -155
- package/dist/definitions/elements/index.d.ts.map +1 -1
- package/dist/definitions/elements/index.js +112 -121
- package/dist/definitions/elements/index.js.map +1 -1
- package/dist/definitions/index.d.ts +1 -1
- package/dist/definitions/shared/base.d.ts +1 -1
- package/dist/definitions/shared/base.d.ts.map +1 -1
- package/dist/definitions/shared/base.js.map +1 -1
- package/dist/display.d.ts +16 -0
- package/dist/display.d.ts.map +1 -0
- package/dist/display.js +33 -0
- package/dist/display.js.map +1 -0
- package/dist/editor.d.ts +6 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +13 -0
- package/dist/editor.js.map +1 -0
- package/dist/engine/registry.d.ts +0 -2
- package/dist/engine/registry.d.ts.map +1 -1
- package/dist/engine/registry.js +1 -5
- package/dist/engine/registry.js.map +1 -1
- package/dist/engine/useCardLoader.js +1 -1
- package/dist/engine/useCardLoader.js.map +1 -1
- package/dist/engine/useElementLoader.js +1 -1
- package/dist/engine/useElementLoader.js.map +1 -1
- package/dist/engine/useFormData.d.ts.map +1 -1
- package/dist/engine/useFormData.js +13 -13
- package/dist/engine/useFormData.js.map +1 -1
- package/dist/file.d.ts +4 -0
- package/dist/file.d.ts.map +1 -0
- package/dist/file.js +9 -0
- package/dist/file.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +71 -75
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +11 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +23 -0
- package/dist/input.js.map +1 -0
- package/dist/lib/storybook.d.ts +45 -0
- package/dist/lib/storybook.d.ts.map +1 -0
- package/dist/option-select.d.ts +10 -0
- package/dist/option-select.d.ts.map +1 -0
- package/dist/option-select.js +21 -0
- package/dist/option-select.js.map +1 -0
- package/dist/pages/ShowPage.vue.js +1 -1
- package/dist/pages/ShowPage.vue.js.map +1 -1
- package/dist/picker.d.ts +12 -0
- package/dist/picker.d.ts.map +1 -0
- package/dist/picker.js +25 -0
- package/dist/picker.js.map +1 -0
- package/dist/stores/dependencyListBuilderStore.d.ts +1 -1
- package/dist/stores/dependencyListBuilderStore.js +5 -5
- package/dist/stores/dependencyListBuilderStore.js.map +1 -1
- package/dist/stores/elementListBuilderStore.d.ts +1 -1
- package/dist/stores/elementListBuilderStore.js +14 -14
- package/dist/stores/elementListBuilderStore.js.map +1 -1
- package/dist/stores/formBuilderStore.d.ts +1 -1
- package/dist/stores/formBuilderStore.js +5 -5
- package/dist/stores/formBuilderStore.js.map +1 -1
- package/dist/stores/formDataStore.d.ts +1 -1
- package/dist/stores/formDataStore.js +2 -2
- package/dist/stores/formDataStore.js.map +1 -1
- package/dist/stores/gridBuilderStore.d.ts +1 -1
- package/dist/stores/gridBuilderStore.js +11 -11
- package/dist/stores/gridBuilderStore.js.map +1 -1
- package/dist/stores/objectBuilderStore.d.ts +1 -1
- package/dist/stores/objectBuilderStore.js +1 -1
- package/dist/stores/objectBuilderStore.js.map +1 -1
- package/dist/stores/presetBuilderStore.d.ts +1 -1
- package/dist/stores/presetBuilderStore.js +12 -12
- package/dist/stores/presetBuilderStore.js.map +1 -1
- package/dist/stores/quizBuilderStore.d.ts +1 -1
- package/dist/stores/quizBuilderStore.js +1 -1
- package/dist/stores/quizBuilderStore.js.map +1 -1
- package/dist/stores/reactiveCanvasBuilderStore.d.ts +1 -1
- package/dist/stores/reactiveCanvasBuilderStore.js +40 -40
- package/dist/stores/reactiveCanvasBuilderStore.js.map +1 -1
- package/dist/styles/mod-ui.css +1 -0
- package/package.json +85 -20
- package/src/action.ts +3 -0
- package/src/adapters/fieldTypeMap.ts +3 -8
- package/src/adapters/index.ts +1 -1
- package/src/boolean.ts +4 -0
- package/src/builder.ts +8 -0
- package/src/cards.ts +7 -0
- package/src/code.ts +5 -0
- package/src/components/compositions/cards/CardListCard.stories.ts +2 -0
- package/src/components/compositions/cards/DataTableCard.stories.ts +2 -0
- package/src/components/compositions/cards/ElementDisplayCard.stories.ts +2 -0
- package/src/components/compositions/cards/ElementListCard.stories.ts +2 -0
- package/src/components/compositions/cards/GridViewCard.stories.ts +2 -0
- package/src/components/compositions/cards/InfoCard.stories.ts +2 -0
- package/src/components/compositions/cards/TabListCard.stories.ts +2 -0
- package/src/components/compositions/elements/action/ButtonAction.stories.ts +3 -1
- package/src/components/compositions/elements/action/ButtonGroupAction.stories.ts +3 -1
- package/src/components/compositions/elements/action/LinkAction.stories.ts +3 -1
- package/src/components/compositions/elements/boolean/CheckboxBoolean.stories.ts +3 -1
- package/src/components/compositions/elements/boolean/IconToggleBoolean.stories.ts +3 -1
- package/src/components/compositions/elements/boolean/RadioBoolean.stories.ts +3 -1
- package/src/components/compositions/elements/boolean/SwitchBoolean.stories.ts +3 -1
- package/src/components/compositions/elements/builder/DependencyListBuilder.stories.ts +1 -1
- package/src/components/compositions/elements/builder/ElementListBuilder.stories.ts +1 -1
- package/src/components/compositions/elements/builder/ElementListBuilder.test.ts +0 -1
- package/src/components/compositions/elements/builder/FormBuilder.stories.ts +2 -0
- package/src/components/compositions/elements/builder/FormBuilder.test.ts +0 -1
- package/src/components/compositions/elements/builder/GridBuilder.stories.ts +2 -0
- package/src/components/compositions/elements/builder/ObjectBuilder.stories.ts +1 -1
- package/src/components/compositions/elements/builder/PresetBuilder.stories.ts +1 -1
- package/src/components/compositions/elements/builder/QuizBuilder.stories.ts +2 -0
- package/src/components/compositions/elements/builder/ReactiveCanvasBuilder.stories.ts +1 -1
- package/src/components/compositions/elements/code/BuildStatus.stories.ts +3 -1
- package/src/components/compositions/elements/code/ChatMessage.stories.ts +1 -1
- package/src/components/compositions/elements/code/FileTree.stories.ts +3 -1
- package/src/components/compositions/elements/code/GitCodeEditor.stories.ts +3 -1
- package/src/components/compositions/elements/code/PullRequestsList.stories.ts +3 -1
- package/src/components/compositions/elements/configuration-block/DialogBlock.stories.ts +1 -1
- package/src/components/compositions/elements/configuration-block/ElementsBlock.stories.ts +1 -1
- package/src/components/compositions/elements/configuration-block/ModalBlock.stories.ts +2 -0
- package/src/components/compositions/elements/configuration-block/RepeatableBlock.stories.ts +45 -2
- package/src/components/compositions/elements/configuration-block/RepeatableBlock.test.ts +47 -16
- package/src/components/compositions/elements/configuration-block/RepeatableBlock.vue +161 -92
- package/src/components/compositions/elements/configuration-block/RepeatableRow.vue +36 -0
- package/src/components/compositions/elements/display/BannerDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/BarcodeDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/CarouselDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/ChartDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/HtmlDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/IconDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/IframeDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/ImageDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/MarkdownDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/ProgressBarDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/QrCodeDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/ReactiveCanvasDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/SpriteDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/TypeDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/display/VideoPlayerDisplay.stories.ts +3 -1
- package/src/components/compositions/elements/editor/CodeEditor.stories.ts +88 -12
- package/src/components/compositions/elements/editor/CodeEditor.test.ts +72 -41
- package/src/components/compositions/elements/editor/CodeEditor.vue +306 -38
- package/src/components/compositions/elements/editor/HtmlEditor.stories.ts +73 -6
- package/src/components/compositions/elements/editor/HtmlEditor.test.ts +59 -50
- package/src/components/compositions/elements/editor/HtmlEditor.vue +942 -41
- package/src/components/compositions/elements/editor/ImageEditor.stories.ts +3 -1
- package/src/components/compositions/elements/editor/MarkdownEditor.stories.ts +3 -1
- package/src/components/compositions/elements/editor/RichTextEditor.stories.ts +3 -1
- package/src/components/compositions/elements/file/AssetPickerFile.stories.ts +3 -1
- package/src/components/compositions/elements/file/DropzoneFile.stories.ts +3 -1
- package/src/components/compositions/elements/file/UploadFile.stories.ts +3 -1
- package/src/components/compositions/elements/input/BarcodeScannerInput.stories.ts +3 -1
- package/src/components/compositions/elements/input/EmailInput.stories.ts +3 -1
- package/src/components/compositions/elements/input/NumberInput.stories.ts +3 -1
- package/src/components/compositions/elements/input/PasswordInput.stories.ts +3 -1
- package/src/components/compositions/elements/input/RangeSliderInput.stories.ts +3 -1
- package/src/components/compositions/elements/input/SearchInput.stories.ts +3 -1
- package/src/components/compositions/elements/input/TelInput.stories.ts +3 -1
- package/src/components/compositions/elements/input/TextInput.stories.ts +3 -1
- package/src/components/compositions/elements/input/TextareaInput.stories.ts +3 -1
- package/src/components/compositions/elements/input/UrlInput.stories.ts +3 -1
- package/src/components/compositions/elements/option-select/AsyncSelectOption.stories.ts +3 -1
- package/src/components/compositions/elements/option-select/AutoCompleteOption.stories.ts +3 -1
- package/src/components/compositions/elements/option-select/CheckboxOption.stories.ts +3 -1
- package/src/components/compositions/elements/option-select/IntegrationConnectorOption.stories.ts +3 -1
- package/src/components/compositions/elements/option-select/ListOption.stories.ts +3 -1
- package/src/components/compositions/elements/option-select/PillSelectOption.stories.ts +3 -1
- package/src/components/compositions/elements/option-select/RadioOption.stories.ts +3 -1
- package/src/components/compositions/elements/option-select/SelectMultipleOption.stories.ts +3 -1
- package/src/components/compositions/elements/option-select/SelectOption.stories.ts +3 -1
- package/src/components/compositions/elements/picker/AsyncSelectPicker.stories.ts +3 -1
- package/src/components/compositions/elements/picker/ColorPicker.stories.ts +3 -1
- package/src/components/compositions/elements/picker/DataModelPicker.stories.ts +3 -1
- package/src/components/compositions/elements/picker/DatePicker.stories.ts +3 -1
- package/src/components/compositions/elements/picker/DateTimePicker.stories.ts +3 -1
- package/src/components/compositions/elements/picker/IconPicker.stories.ts +3 -1
- package/src/components/compositions/elements/{components → picker}/IconPickerInline.stories.ts +3 -1
- package/src/components/compositions/elements/{components → picker}/IconPickerInline.test.ts +8 -8
- package/src/components/compositions/elements/{components → picker}/IconPickerInline.vue +4 -4
- package/src/components/compositions/elements/picker/IntegrationConnectorPicker.stories.ts +3 -1
- package/src/components/compositions/elements/picker/MapPicker.stories.ts +3 -1
- package/src/components/compositions/elements/picker/TimePicker.stories.ts +3 -1
- package/src/components/compositions/elements/picker/TimezonePicker.stories.ts +3 -1
- package/src/components/ui/accordion/Accordion.stories.ts +2 -0
- package/src/components/ui/alert/Alert.stories.ts +2 -0
- package/src/components/ui/avatar/Avatar.stories.ts +2 -0
- package/src/components/ui/badge/Badge.stories.ts +2 -0
- package/src/components/ui/button/Button.stories.ts +5 -0
- package/src/components/ui/calendar/Calendar.stories.ts +2 -0
- package/src/components/ui/card/Card.stories.ts +2 -0
- package/src/components/ui/checkbox/Checkbox.stories.ts +2 -0
- package/src/components/ui/combobox/Combobox.stories.ts +2 -0
- package/src/components/ui/command/Command.stories.ts +2 -0
- package/src/components/ui/dialog/Dialog.stories.ts +2 -0
- package/src/components/ui/dropdown-menu/DropdownMenu.stories.ts +2 -0
- package/src/components/ui/field-frame/FieldFrame.stories.ts +1 -1
- package/src/components/ui/index.ts +3 -3
- package/src/components/ui/input/Input.stories.ts +2 -0
- package/src/components/ui/label/Label.stories.ts +2 -0
- package/src/components/ui/popover/Popover.stories.ts +2 -0
- package/src/components/ui/progress/Progress.stories.ts +2 -0
- package/src/components/ui/radio-group/RadioGroup.stories.ts +2 -0
- package/src/components/ui/select/Select.stories.ts +2 -0
- package/src/components/ui/separator/Separator.stories.ts +2 -0
- package/src/components/ui/sheet/Sheet.stories.ts +2 -0
- package/src/components/ui/skeleton/Skeleton.stories.ts +2 -0
- package/src/components/ui/slider/Slider.stories.ts +2 -0
- package/src/components/ui/switch/Switch.stories.ts +2 -0
- package/src/components/ui/table/Table.stories.ts +2 -0
- package/src/components/ui/tabs/Tabs.stories.ts +2 -0
- package/src/components/ui/textarea/Textarea.stories.ts +2 -0
- package/src/components/ui/toast/Toaster.stories.ts +2 -0
- package/src/components/ui/toast/index.ts +1 -1
- package/src/components/ui/toggle/Toggle.stories.ts +2 -0
- package/src/components/ui/tooltip/Tooltip.stories.ts +2 -0
- package/src/configuration-block.ts +4 -0
- package/src/definitions/__tests__/schema.test.ts +0 -1
- package/src/definitions/elements/PickerElement.ts +2 -0
- package/src/definitions/elements/index.ts +0 -18
- package/src/definitions/index.ts +1 -1
- package/src/definitions/shared/base.ts +0 -1
- package/src/display.ts +15 -0
- package/src/editor.ts +5 -0
- package/src/engine/registry.ts +1 -7
- package/src/engine/useFormData.ts +1 -1
- package/src/file.ts +3 -0
- package/src/index.ts +3 -3
- package/src/input.ts +10 -0
- package/src/lib/storybook.ts +67 -0
- package/src/option-select.ts +9 -0
- package/src/pages/IndexPage.stories.ts +2 -1
- package/src/pages/ShowPage.stories.ts +2 -1
- package/src/pages/ShowPage.vue +1 -1
- package/src/picker.ts +11 -0
- package/src/stores/dependencyListBuilderStore.ts +1 -1
- package/src/stores/elementListBuilderStore.ts +1 -1
- package/src/stores/formBuilderStore.ts +1 -1
- package/src/stores/formDataStore.ts +1 -1
- package/src/stores/gridBuilderStore.ts +1 -1
- package/src/stores/objectBuilderStore.ts +1 -1
- package/src/stores/presetBuilderStore.ts +1 -1
- package/src/stores/quizBuilderStore.ts +1 -1
- package/src/stores/reactiveCanvasBuilderStore.ts +1 -1
- package/src/styles/themes/dark.css +1 -1
- package/src/styles/themes/default.css +1 -1
- package/src/styles/themes/kiosk.css +1 -1
- package/dist/components/compositions/elements/components/IconBadge.vue.js +0 -5
- package/dist/components/compositions/elements/components/IconBadge.vue.js.map +0 -1
- package/dist/components/compositions/elements/components/IconBadge.vue2.js +0 -77
- package/dist/components/compositions/elements/components/IconBadge.vue2.js.map +0 -1
- package/dist/components/compositions/elements/components/IconPickerInline.vue.js +0 -5
- package/dist/components/compositions/elements/components/IconPickerInline.vue.js.map +0 -1
- package/dist/components/compositions/elements/components/IconPickerInline.vue2.js.map +0 -1
- package/dist/definitions/elements/ComponentsElement.d.ts +0 -187
- package/dist/definitions/elements/ComponentsElement.d.ts.map +0 -1
- package/dist/definitions/elements/ComponentsElement.js +0 -111
- package/dist/definitions/elements/ComponentsElement.js.map +0 -1
- package/dist/styles/index.css +0 -1
- package/src/components/compositions/elements/components/IconBadge.stories.ts +0 -96
- package/src/components/compositions/elements/components/IconBadge.test.ts +0 -70
- package/src/components/compositions/elements/components/IconBadge.vue +0 -121
- package/src/definitions/elements/ComponentsElement.ts +0 -149
|
@@ -31,7 +31,7 @@ export declare function defaultValueForType(type: ObjectBuilderEntryType): unkno
|
|
|
31
31
|
export declare function recordToSchema(record: Record<string, unknown>): ObjectBuilderSchema;
|
|
32
32
|
/** Flatten an `ObjectBuilderSchema` into a plain JS object. */
|
|
33
33
|
export declare function toRecord(schema: ObjectBuilderSchema): Record<string, unknown>;
|
|
34
|
-
export declare const useObjectBuilderStore: import('pinia').StoreDefinition<"
|
|
34
|
+
export declare const useObjectBuilderStore: import('pinia').StoreDefinition<"gx-modui/objectBuilder", Pick<{
|
|
35
35
|
builders: import('vue').Ref<Record<string, ObjectBuilderSchema>, Record<string, ObjectBuilderSchema>>;
|
|
36
36
|
selections: import('vue').Ref<Record<string, ObjectBuilderSelection>, Record<string, ObjectBuilderSelection>>;
|
|
37
37
|
ensureBuilder: (builderId: string) => ObjectBuilderSchema;
|
|
@@ -52,7 +52,7 @@ function C(e) {
|
|
|
52
52
|
return t === "string" ? "string" : t === "number" ? "number" : t === "boolean" ? "boolean" : "object";
|
|
53
53
|
}
|
|
54
54
|
const _ = $(
|
|
55
|
-
"
|
|
55
|
+
"gx-modui/objectBuilder",
|
|
56
56
|
() => {
|
|
57
57
|
const e = m({}), t = m({});
|
|
58
58
|
function r(n) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectBuilderStore.js","sources":["../../src/stores/objectBuilderStore.ts"],"sourcesContent":["import { defineStore } from \"pinia\"\nimport { computed, ref } from \"vue\"\n\n/**\n * State for a single ObjectBuilder instance. Multiple ObjectBuilders\n * can coexist on a page; each is keyed by `builderId`.\n *\n * The schema is a flat ordered list of typed key/value entries. The\n * helper `toRecord()` flattens entries into a plain JS object.\n */\nexport type ObjectBuilderEntryType =\n | \"string\"\n | \"number\"\n | \"boolean\"\n | \"array\"\n | \"object\"\n | \"null\"\n\nexport interface ObjectBuilderEntry {\n id: string\n key: string\n type: ObjectBuilderEntryType\n value: unknown\n}\n\nexport interface ObjectBuilderSchema {\n entries: ObjectBuilderEntry[]\n}\n\n/** Identifies which entry is currently selected for editing. */\nexport interface ObjectBuilderSelection {\n id: string | null\n}\n\nlet idCounter = 0\nfunction nextId(prefix: string): string {\n idCounter += 1\n return `${prefix}-${Date.now()}-${idCounter}`\n}\n\n/** Test helper to make ids deterministic. */\nexport function __resetObjectBuilderIdCounter(): void {\n idCounter = 0\n}\n\n/** Sensible default values for each entry type. */\nexport function defaultValueForType(type: ObjectBuilderEntryType): unknown {\n switch (type) {\n case \"string\":\n return \"\"\n case \"number\":\n return 0\n case \"boolean\":\n return false\n case \"array\":\n return []\n case \"object\":\n return {}\n case \"null\":\n return null\n }\n}\n\nfunction emptySchema(): ObjectBuilderSchema {\n return { entries: [] }\n}\n\n/**\n * Normalise a plain `Record<string, unknown>` into an\n * `ObjectBuilderSchema`. Used when consumers pass a raw object via\n * `modelValue`.\n */\nexport function recordToSchema(\n record: Record<string, unknown>,\n): ObjectBuilderSchema {\n const entries: ObjectBuilderEntry[] = []\n for (const [key, value] of Object.entries(record)) {\n entries.push({\n id: nextId(\"obj-entry\"),\n key,\n type: detectType(value),\n value,\n })\n }\n return { entries }\n}\n\n/** Flatten an `ObjectBuilderSchema` into a plain JS object. */\nexport function toRecord(schema: ObjectBuilderSchema): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const entry of schema.entries) {\n if (!entry.key) {\n continue\n }\n out[entry.key] = entry.value\n }\n return out\n}\n\nfunction detectType(value: unknown): ObjectBuilderEntryType {\n if (value === null) {\n return \"null\"\n }\n if (Array.isArray(value)) {\n return \"array\"\n }\n const t = typeof value\n if (t === \"string\") {\n return \"string\"\n }\n if (t === \"number\") {\n return \"number\"\n }\n if (t === \"boolean\") {\n return \"boolean\"\n }\n return \"object\"\n}\n\nexport const useObjectBuilderStore = defineStore(\n \"gxp-adminkit/objectBuilder\",\n () => {\n const builders = ref<Record<string, ObjectBuilderSchema>>({})\n const selections = ref<Record<string, ObjectBuilderSelection>>({})\n\n function ensureBuilder(builderId: string): ObjectBuilderSchema {\n if (!builders.value[builderId]) {\n builders.value[builderId] = emptySchema()\n selections.value[builderId] = { id: null }\n }\n return builders.value[builderId]!\n }\n\n function loadSchema(\n builderId: string,\n schema: ObjectBuilderSchema,\n ): void {\n builders.value[builderId] = {\n entries: schema.entries.map((entry) => ({ ...entry })),\n }\n selections.value[builderId] = { id: null }\n }\n\n function loadRecord(\n builderId: string,\n record: Record<string, unknown>,\n ): void {\n loadSchema(builderId, recordToSchema(record))\n }\n\n function resetBuilder(builderId: string): void {\n delete builders.value[builderId]\n delete selections.value[builderId]\n }\n\n /** Append a new entry of `type` and return its id. */\n function addEntry(\n builderId: string,\n type: ObjectBuilderEntryType,\n ): string {\n const schema = ensureBuilder(builderId)\n const id = nextId(\"obj-entry\")\n schema.entries = [\n ...schema.entries,\n {\n id,\n key: \"\",\n type,\n value: defaultValueForType(type),\n },\n ]\n return id\n }\n\n /** Remove an entry by id. */\n function removeEntry(builderId: string, entryId: string): void {\n const schema = ensureBuilder(builderId)\n schema.entries = schema.entries.filter((e) => e.id !== entryId)\n const sel = selections.value[builderId]\n if (sel?.id === entryId) {\n selections.value[builderId] = { id: null }\n }\n }\n\n /** Move an entry from `fromIndex` to `toIndex`. */\n function reorderEntry(\n builderId: string,\n fromIndex: number,\n toIndex: number,\n ): void {\n const schema = ensureBuilder(builderId)\n const list = schema.entries\n if (\n fromIndex < 0 ||\n fromIndex >= list.length ||\n toIndex < 0 ||\n toIndex >= list.length ||\n fromIndex === toIndex\n ) {\n return\n }\n const next = [...list]\n const [moved] = next.splice(fromIndex, 1)\n if (moved !== undefined) {\n next.splice(toIndex, 0, moved)\n schema.entries = next\n }\n }\n\n /** Patch an entry's fields. When `type` changes, the value resets. */\n function updateEntry(\n builderId: string,\n entryId: string,\n patch: Partial<Omit<ObjectBuilderEntry, \"id\">>,\n ): void {\n const schema = ensureBuilder(builderId)\n const idx = schema.entries.findIndex((e) => e.id === entryId)\n if (idx < 0) {\n return\n }\n const current = schema.entries[idx]!\n const next: ObjectBuilderEntry = { ...current, ...patch }\n if (patch.type && patch.type !== current.type && patch.value === undefined) {\n next.value = defaultValueForType(patch.type)\n }\n const list = [...schema.entries]\n list[idx] = next\n schema.entries = list\n }\n\n function select(builderId: string, id: string | null): void {\n selections.value[builderId] = { id }\n }\n\n function getSelection(builderId: string): ObjectBuilderSelection {\n return selections.value[builderId] ?? { id: null }\n }\n\n function getSchema(builderId: string): ObjectBuilderSchema {\n return ensureBuilder(builderId)\n }\n\n return {\n builders,\n selections,\n ensureBuilder,\n loadSchema,\n loadRecord,\n resetBuilder,\n addEntry,\n removeEntry,\n reorderEntry,\n updateEntry,\n select,\n getSelection,\n getSchema,\n }\n },\n)\n\n/** Composable wrapper around `useObjectBuilderStore` for one builder. */\nexport function useObjectBuilder(builderId: string) {\n const store = useObjectBuilderStore()\n store.ensureBuilder(builderId)\n return {\n schema: computed<ObjectBuilderSchema>(() => store.getSchema(builderId)),\n selection: computed<ObjectBuilderSelection>(() =>\n store.getSelection(builderId),\n ),\n addEntry: (type: ObjectBuilderEntryType) => store.addEntry(builderId, type),\n removeEntry: (id: string) => store.removeEntry(builderId, id),\n reorderEntry: (from: number, to: number) =>\n store.reorderEntry(builderId, from, to),\n updateEntry: (\n id: string,\n patch: Partial<Omit<ObjectBuilderEntry, \"id\">>,\n ) => store.updateEntry(builderId, id, patch),\n select: (id: string | null) => store.select(builderId, id),\n loadSchema: (schema: ObjectBuilderSchema) =>\n store.loadSchema(builderId, schema),\n loadRecord: (record: Record<string, unknown>) =>\n store.loadRecord(builderId, record),\n reset: () => store.resetBuilder(builderId),\n }\n}\n"],"names":["idCounter","nextId","prefix","__resetObjectBuilderIdCounter","defaultValueForType","type","emptySchema","recordToSchema","record","entries","key","value","detectType","toRecord","schema","out","entry","useObjectBuilderStore","defineStore","builders","ref","selections","ensureBuilder","builderId","loadSchema","loadRecord","resetBuilder","addEntry","id","removeEntry","entryId","e","sel","reorderEntry","fromIndex","toIndex","list","next","moved","updateEntry","patch","idx","current","select","getSelection","getSchema","useObjectBuilder","store","computed","from","to"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"objectBuilderStore.js","sources":["../../src/stores/objectBuilderStore.ts"],"sourcesContent":["import { defineStore } from \"pinia\"\nimport { computed, ref } from \"vue\"\n\n/**\n * State for a single ObjectBuilder instance. Multiple ObjectBuilders\n * can coexist on a page; each is keyed by `builderId`.\n *\n * The schema is a flat ordered list of typed key/value entries. The\n * helper `toRecord()` flattens entries into a plain JS object.\n */\nexport type ObjectBuilderEntryType =\n | \"string\"\n | \"number\"\n | \"boolean\"\n | \"array\"\n | \"object\"\n | \"null\"\n\nexport interface ObjectBuilderEntry {\n id: string\n key: string\n type: ObjectBuilderEntryType\n value: unknown\n}\n\nexport interface ObjectBuilderSchema {\n entries: ObjectBuilderEntry[]\n}\n\n/** Identifies which entry is currently selected for editing. */\nexport interface ObjectBuilderSelection {\n id: string | null\n}\n\nlet idCounter = 0\nfunction nextId(prefix: string): string {\n idCounter += 1\n return `${prefix}-${Date.now()}-${idCounter}`\n}\n\n/** Test helper to make ids deterministic. */\nexport function __resetObjectBuilderIdCounter(): void {\n idCounter = 0\n}\n\n/** Sensible default values for each entry type. */\nexport function defaultValueForType(type: ObjectBuilderEntryType): unknown {\n switch (type) {\n case \"string\":\n return \"\"\n case \"number\":\n return 0\n case \"boolean\":\n return false\n case \"array\":\n return []\n case \"object\":\n return {}\n case \"null\":\n return null\n }\n}\n\nfunction emptySchema(): ObjectBuilderSchema {\n return { entries: [] }\n}\n\n/**\n * Normalise a plain `Record<string, unknown>` into an\n * `ObjectBuilderSchema`. Used when consumers pass a raw object via\n * `modelValue`.\n */\nexport function recordToSchema(\n record: Record<string, unknown>,\n): ObjectBuilderSchema {\n const entries: ObjectBuilderEntry[] = []\n for (const [key, value] of Object.entries(record)) {\n entries.push({\n id: nextId(\"obj-entry\"),\n key,\n type: detectType(value),\n value,\n })\n }\n return { entries }\n}\n\n/** Flatten an `ObjectBuilderSchema` into a plain JS object. */\nexport function toRecord(schema: ObjectBuilderSchema): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const entry of schema.entries) {\n if (!entry.key) {\n continue\n }\n out[entry.key] = entry.value\n }\n return out\n}\n\nfunction detectType(value: unknown): ObjectBuilderEntryType {\n if (value === null) {\n return \"null\"\n }\n if (Array.isArray(value)) {\n return \"array\"\n }\n const t = typeof value\n if (t === \"string\") {\n return \"string\"\n }\n if (t === \"number\") {\n return \"number\"\n }\n if (t === \"boolean\") {\n return \"boolean\"\n }\n return \"object\"\n}\n\nexport const useObjectBuilderStore = defineStore(\n \"gx-modui/objectBuilder\",\n () => {\n const builders = ref<Record<string, ObjectBuilderSchema>>({})\n const selections = ref<Record<string, ObjectBuilderSelection>>({})\n\n function ensureBuilder(builderId: string): ObjectBuilderSchema {\n if (!builders.value[builderId]) {\n builders.value[builderId] = emptySchema()\n selections.value[builderId] = { id: null }\n }\n return builders.value[builderId]!\n }\n\n function loadSchema(\n builderId: string,\n schema: ObjectBuilderSchema,\n ): void {\n builders.value[builderId] = {\n entries: schema.entries.map((entry) => ({ ...entry })),\n }\n selections.value[builderId] = { id: null }\n }\n\n function loadRecord(\n builderId: string,\n record: Record<string, unknown>,\n ): void {\n loadSchema(builderId, recordToSchema(record))\n }\n\n function resetBuilder(builderId: string): void {\n delete builders.value[builderId]\n delete selections.value[builderId]\n }\n\n /** Append a new entry of `type` and return its id. */\n function addEntry(\n builderId: string,\n type: ObjectBuilderEntryType,\n ): string {\n const schema = ensureBuilder(builderId)\n const id = nextId(\"obj-entry\")\n schema.entries = [\n ...schema.entries,\n {\n id,\n key: \"\",\n type,\n value: defaultValueForType(type),\n },\n ]\n return id\n }\n\n /** Remove an entry by id. */\n function removeEntry(builderId: string, entryId: string): void {\n const schema = ensureBuilder(builderId)\n schema.entries = schema.entries.filter((e) => e.id !== entryId)\n const sel = selections.value[builderId]\n if (sel?.id === entryId) {\n selections.value[builderId] = { id: null }\n }\n }\n\n /** Move an entry from `fromIndex` to `toIndex`. */\n function reorderEntry(\n builderId: string,\n fromIndex: number,\n toIndex: number,\n ): void {\n const schema = ensureBuilder(builderId)\n const list = schema.entries\n if (\n fromIndex < 0 ||\n fromIndex >= list.length ||\n toIndex < 0 ||\n toIndex >= list.length ||\n fromIndex === toIndex\n ) {\n return\n }\n const next = [...list]\n const [moved] = next.splice(fromIndex, 1)\n if (moved !== undefined) {\n next.splice(toIndex, 0, moved)\n schema.entries = next\n }\n }\n\n /** Patch an entry's fields. When `type` changes, the value resets. */\n function updateEntry(\n builderId: string,\n entryId: string,\n patch: Partial<Omit<ObjectBuilderEntry, \"id\">>,\n ): void {\n const schema = ensureBuilder(builderId)\n const idx = schema.entries.findIndex((e) => e.id === entryId)\n if (idx < 0) {\n return\n }\n const current = schema.entries[idx]!\n const next: ObjectBuilderEntry = { ...current, ...patch }\n if (patch.type && patch.type !== current.type && patch.value === undefined) {\n next.value = defaultValueForType(patch.type)\n }\n const list = [...schema.entries]\n list[idx] = next\n schema.entries = list\n }\n\n function select(builderId: string, id: string | null): void {\n selections.value[builderId] = { id }\n }\n\n function getSelection(builderId: string): ObjectBuilderSelection {\n return selections.value[builderId] ?? { id: null }\n }\n\n function getSchema(builderId: string): ObjectBuilderSchema {\n return ensureBuilder(builderId)\n }\n\n return {\n builders,\n selections,\n ensureBuilder,\n loadSchema,\n loadRecord,\n resetBuilder,\n addEntry,\n removeEntry,\n reorderEntry,\n updateEntry,\n select,\n getSelection,\n getSchema,\n }\n },\n)\n\n/** Composable wrapper around `useObjectBuilderStore` for one builder. */\nexport function useObjectBuilder(builderId: string) {\n const store = useObjectBuilderStore()\n store.ensureBuilder(builderId)\n return {\n schema: computed<ObjectBuilderSchema>(() => store.getSchema(builderId)),\n selection: computed<ObjectBuilderSelection>(() =>\n store.getSelection(builderId),\n ),\n addEntry: (type: ObjectBuilderEntryType) => store.addEntry(builderId, type),\n removeEntry: (id: string) => store.removeEntry(builderId, id),\n reorderEntry: (from: number, to: number) =>\n store.reorderEntry(builderId, from, to),\n updateEntry: (\n id: string,\n patch: Partial<Omit<ObjectBuilderEntry, \"id\">>,\n ) => store.updateEntry(builderId, id, patch),\n select: (id: string | null) => store.select(builderId, id),\n loadSchema: (schema: ObjectBuilderSchema) =>\n store.loadSchema(builderId, schema),\n loadRecord: (record: Record<string, unknown>) =>\n store.loadRecord(builderId, record),\n reset: () => store.resetBuilder(builderId),\n }\n}\n"],"names":["idCounter","nextId","prefix","__resetObjectBuilderIdCounter","defaultValueForType","type","emptySchema","recordToSchema","record","entries","key","value","detectType","toRecord","schema","out","entry","useObjectBuilderStore","defineStore","builders","ref","selections","ensureBuilder","builderId","loadSchema","loadRecord","resetBuilder","addEntry","id","removeEntry","entryId","e","sel","reorderEntry","fromIndex","toIndex","list","next","moved","updateEntry","patch","idx","current","select","getSelection","getSchema","useObjectBuilder","store","computed","from","to"],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export interface PresetBuilderState {
|
|
|
23
23
|
}
|
|
24
24
|
/** Test helper to make ids deterministic. */
|
|
25
25
|
export declare function __resetPresetBuilderIdCounter(): void;
|
|
26
|
-
export declare const usePresetBuilderStore: import('pinia').StoreDefinition<"
|
|
26
|
+
export declare const usePresetBuilderStore: import('pinia').StoreDefinition<"gx-modui/presetBuilder", Pick<{
|
|
27
27
|
builders: import('vue').Ref<Record<string, PresetBuilderState>, Record<string, PresetBuilderState>>;
|
|
28
28
|
ensureBuilder: (builderId: string) => PresetBuilderState;
|
|
29
29
|
getState: (builderId: string) => PresetBuilderState;
|
|
@@ -10,34 +10,34 @@ function l(e) {
|
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
12
|
const B = p(
|
|
13
|
-
"
|
|
13
|
+
"gx-modui/presetBuilder",
|
|
14
14
|
() => {
|
|
15
15
|
const e = f({});
|
|
16
16
|
function r(t) {
|
|
17
17
|
return e.value[t] || (e.value[t] = l(t)), e.value[t];
|
|
18
18
|
}
|
|
19
|
-
function
|
|
19
|
+
function s(t) {
|
|
20
20
|
return r(t);
|
|
21
21
|
}
|
|
22
|
-
function i(t,
|
|
22
|
+
function i(t, n) {
|
|
23
23
|
const o = r(t);
|
|
24
|
-
o.presetName =
|
|
24
|
+
o.presetName = n;
|
|
25
25
|
}
|
|
26
|
-
function u(t,
|
|
26
|
+
function u(t, n) {
|
|
27
27
|
const o = r(t);
|
|
28
|
-
o.presetDescription =
|
|
28
|
+
o.presetDescription = n;
|
|
29
29
|
}
|
|
30
30
|
function a(t) {
|
|
31
31
|
delete e.value[t];
|
|
32
32
|
}
|
|
33
|
-
function c(t,
|
|
33
|
+
function c(t, n) {
|
|
34
34
|
const o = r(t);
|
|
35
|
-
o.presetName =
|
|
35
|
+
o.presetName = n.presetName ?? "", o.presetDescription = n.presetDescription ?? "";
|
|
36
36
|
}
|
|
37
37
|
return {
|
|
38
38
|
builders: e,
|
|
39
39
|
ensureBuilder: r,
|
|
40
|
-
getState:
|
|
40
|
+
getState: s,
|
|
41
41
|
setName: i,
|
|
42
42
|
setDescription: u,
|
|
43
43
|
resetBuilder: a,
|
|
@@ -49,9 +49,9 @@ function v(e) {
|
|
|
49
49
|
const r = B();
|
|
50
50
|
return r.ensureBuilder(e), {
|
|
51
51
|
state: m(() => r.getState(e)),
|
|
52
|
-
setName: (
|
|
53
|
-
setDescription: (
|
|
54
|
-
loadMeta: (
|
|
52
|
+
setName: (s) => r.setName(e, s),
|
|
53
|
+
setDescription: (s) => r.setDescription(e, s),
|
|
54
|
+
loadMeta: (s) => r.loadMeta(e, s),
|
|
55
55
|
reset: () => r.resetBuilder(e)
|
|
56
56
|
};
|
|
57
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presetBuilderStore.js","sources":["../../src/stores/presetBuilderStore.ts"],"sourcesContent":["import { defineStore } from \"pinia\"\nimport { computed, ref } from \"vue\"\nimport type { BuilderSchema } from \"./formBuilderStore\"\n\n/**\n * State for a single PresetBuilder instance. Multiple PresetBuilders\n * can coexist on a page; each is keyed by `builderId`.\n *\n * A preset bundles a name + optional description with an inner\n * FormBuilder-style `BuilderSchema`. The inner schema is owned by\n * `formBuilderStore`; this store only tracks the metadata + a reference\n * to the inner builder id, so the inspector / canvas can read & write\n * the preset name / description without round-tripping through the\n * inner FormBuilder.\n */\nexport interface PresetBuilderSchema {\n presetName: string\n presetDescription?: string\n schema: BuilderSchema\n}\n\nexport interface PresetBuilderState {\n presetName: string\n presetDescription: string\n /** Id of the inner FormBuilder schema stored in `formBuilderStore`. */\n innerBuilderId: string\n}\n\nlet idCounter = 0\nfunction nextId(prefix: string): string {\n idCounter += 1\n return `${prefix}-${Date.now()}-${idCounter}`\n}\n\n/** Test helper to make ids deterministic. */\nexport function __resetPresetBuilderIdCounter(): void {\n idCounter = 0\n}\n\nfunction emptyState(builderId: string): PresetBuilderState {\n return {\n presetName: \"\",\n presetDescription: \"\",\n innerBuilderId: `${builderId}::inner`,\n }\n}\n\nexport const usePresetBuilderStore = defineStore(\n \"
|
|
1
|
+
{"version":3,"file":"presetBuilderStore.js","sources":["../../src/stores/presetBuilderStore.ts"],"sourcesContent":["import { defineStore } from \"pinia\"\nimport { computed, ref } from \"vue\"\nimport type { BuilderSchema } from \"./formBuilderStore\"\n\n/**\n * State for a single PresetBuilder instance. Multiple PresetBuilders\n * can coexist on a page; each is keyed by `builderId`.\n *\n * A preset bundles a name + optional description with an inner\n * FormBuilder-style `BuilderSchema`. The inner schema is owned by\n * `formBuilderStore`; this store only tracks the metadata + a reference\n * to the inner builder id, so the inspector / canvas can read & write\n * the preset name / description without round-tripping through the\n * inner FormBuilder.\n */\nexport interface PresetBuilderSchema {\n presetName: string\n presetDescription?: string\n schema: BuilderSchema\n}\n\nexport interface PresetBuilderState {\n presetName: string\n presetDescription: string\n /** Id of the inner FormBuilder schema stored in `formBuilderStore`. */\n innerBuilderId: string\n}\n\nlet idCounter = 0\nfunction nextId(prefix: string): string {\n idCounter += 1\n return `${prefix}-${Date.now()}-${idCounter}`\n}\n\n/** Test helper to make ids deterministic. */\nexport function __resetPresetBuilderIdCounter(): void {\n idCounter = 0\n}\n\nfunction emptyState(builderId: string): PresetBuilderState {\n return {\n presetName: \"\",\n presetDescription: \"\",\n innerBuilderId: `${builderId}::inner`,\n }\n}\n\nexport const usePresetBuilderStore = defineStore(\n \"gx-modui/presetBuilder\",\n () => {\n const builders = ref<Record<string, PresetBuilderState>>({})\n\n function ensureBuilder(builderId: string): PresetBuilderState {\n if (!builders.value[builderId]) {\n builders.value[builderId] = emptyState(builderId)\n }\n return builders.value[builderId]!\n }\n\n function getState(builderId: string): PresetBuilderState {\n return ensureBuilder(builderId)\n }\n\n function setName(builderId: string, name: string): void {\n const state = ensureBuilder(builderId)\n state.presetName = name\n }\n\n function setDescription(builderId: string, description: string): void {\n const state = ensureBuilder(builderId)\n state.presetDescription = description\n }\n\n function resetBuilder(builderId: string): void {\n delete builders.value[builderId]\n }\n\n /**\n * Used internally by the composable to seed name + description from\n * a `PresetBuilderSchema`. Inner schema seeding is handled by the\n * composition directly because the inner FormBuilder store has its\n * own `loadSchema` entrypoint.\n */\n function loadMeta(\n builderId: string,\n meta: Pick<PresetBuilderSchema, \"presetName\" | \"presetDescription\">,\n ): void {\n const state = ensureBuilder(builderId)\n state.presetName = meta.presetName ?? \"\"\n state.presetDescription = meta.presetDescription ?? \"\"\n }\n\n return {\n builders,\n ensureBuilder,\n getState,\n setName,\n setDescription,\n resetBuilder,\n loadMeta,\n }\n },\n)\n\n/** Composable wrapper around `usePresetBuilderStore` for one builder. */\nexport function usePresetBuilder(builderId: string) {\n const store = usePresetBuilderStore()\n store.ensureBuilder(builderId)\n // Touch the id counter so test helpers can produce deterministic ids\n // when the composable is invoked outside of `ensureBuilder`.\n if (!builderId) {\n nextId(\"preset\")\n }\n return {\n state: computed<PresetBuilderState>(() => store.getState(builderId)),\n setName: (name: string) => store.setName(builderId, name),\n setDescription: (description: string) =>\n store.setDescription(builderId, description),\n loadMeta: (\n meta: Pick<PresetBuilderSchema, \"presetName\" | \"presetDescription\">,\n ) => store.loadMeta(builderId, meta),\n reset: () => store.resetBuilder(builderId),\n }\n}\n"],"names":["__resetPresetBuilderIdCounter","emptyState","builderId","usePresetBuilderStore","defineStore","builders","ref","ensureBuilder","getState","setName","name","state","setDescription","description","resetBuilder","loadMeta","meta","usePresetBuilder","store","computed"],"mappings":";;AAmCO,SAASA,IAAsC;AAEtD;AAEA,SAASC,EAAWC,GAAuC;AACzD,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,gBAAgB,GAAGA,CAAS;AAAA,EAAA;AAEhC;AAEO,MAAMC,IAAwBC;AAAA,EACnC;AAAA,EACA,MAAM;AACJ,UAAMC,IAAWC,EAAwC,EAAE;AAE3D,aAASC,EAAcL,GAAuC;AAC5D,aAAKG,EAAS,MAAMH,CAAS,MAC3BG,EAAS,MAAMH,CAAS,IAAID,EAAWC,CAAS,IAE3CG,EAAS,MAAMH,CAAS;AAAA,IACjC;AAEA,aAASM,EAASN,GAAuC;AACvD,aAAOK,EAAcL,CAAS;AAAA,IAChC;AAEA,aAASO,EAAQP,GAAmBQ,GAAoB;AACtD,YAAMC,IAAQJ,EAAcL,CAAS;AACrC,MAAAS,EAAM,aAAaD;AAAA,IACrB;AAEA,aAASE,EAAeV,GAAmBW,GAA2B;AACpE,YAAMF,IAAQJ,EAAcL,CAAS;AACrC,MAAAS,EAAM,oBAAoBE;AAAA,IAC5B;AAEA,aAASC,EAAaZ,GAAyB;AAC7C,aAAOG,EAAS,MAAMH,CAAS;AAAA,IACjC;AAQA,aAASa,EACPb,GACAc,GACM;AACN,YAAML,IAAQJ,EAAcL,CAAS;AACrC,MAAAS,EAAM,aAAaK,EAAK,cAAc,IACtCL,EAAM,oBAAoBK,EAAK,qBAAqB;AAAA,IACtD;AAEA,WAAO;AAAA,MACL,UAAAX;AAAA,MACA,eAAAE;AAAA,MACA,UAAAC;AAAA,MACA,SAAAC;AAAA,MACA,gBAAAG;AAAA,MACA,cAAAE;AAAA,MACA,UAAAC;AAAA,IAAA;AAAA,EAEJ;AACF;AAGO,SAASE,EAAiBf,GAAmB;AAClD,QAAMgB,IAAQf,EAAA;AACd,SAAAe,EAAM,cAAchB,CAAS,GAMtB;AAAA,IACL,OAAOiB,EAA6B,MAAMD,EAAM,SAAShB,CAAS,CAAC;AAAA,IACnE,SAAS,CAACQ,MAAiBQ,EAAM,QAAQhB,GAAWQ,CAAI;AAAA,IACxD,gBAAgB,CAACG,MACfK,EAAM,eAAehB,GAAWW,CAAW;AAAA,IAC7C,UAAU,CACRG,MACGE,EAAM,SAAShB,GAAWc,CAAI;AAAA,IACnC,OAAO,MAAME,EAAM,aAAahB,CAAS;AAAA,EAAA;AAE7C;"}
|
|
@@ -26,7 +26,7 @@ export interface QuizBuilderSelection {
|
|
|
26
26
|
}
|
|
27
27
|
/** Test helper to make ids deterministic. */
|
|
28
28
|
export declare function __resetQuizBuilderIdCounter(): void;
|
|
29
|
-
export declare const useQuizBuilderStore: import('pinia').StoreDefinition<"
|
|
29
|
+
export declare const useQuizBuilderStore: import('pinia').StoreDefinition<"gx-modui/quizBuilder", Pick<{
|
|
30
30
|
builders: import('vue').Ref<Record<string, QuizBuilderSchema>, Record<string, QuizBuilderSchema>>;
|
|
31
31
|
selections: import('vue').Ref<Record<string, QuizBuilderSelection>, Record<string, QuizBuilderSelection>>;
|
|
32
32
|
ensureBuilder: (builderId: string) => QuizBuilderSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quizBuilderStore.js","sources":["../../src/stores/quizBuilderStore.ts"],"sourcesContent":["import { defineStore } from \"pinia\"\nimport { computed, ref } from \"vue\"\n\nexport type QuizQuestionType = \"single-choice\" | \"multi-choice\" | \"free-text\"\n\nexport interface QuizOption {\n id: string\n label: string\n value: string | number\n correct?: boolean\n score?: number\n}\n\nexport interface QuizQuestion {\n id: string\n prompt: string\n type: QuizQuestionType\n options: QuizOption[]\n helpText?: string\n required?: boolean\n}\n\nexport interface QuizBuilderSchema {\n title?: string\n description?: string\n questions: QuizQuestion[]\n passingScore?: number\n}\n\n/** Identifies which question is currently selected. */\nexport interface QuizBuilderSelection {\n id: string | null\n}\n\nlet idCounter = 0\nfunction nextId(prefix: string): string {\n idCounter += 1\n return `${prefix}-${Date.now()}-${idCounter}`\n}\n\n/** Test helper to make ids deterministic. */\nexport function __resetQuizBuilderIdCounter(): void {\n idCounter = 0\n}\n\nfunction emptySchema(): QuizBuilderSchema {\n return {\n title: \"\",\n description: \"\",\n questions: [],\n passingScore: 0,\n }\n}\n\nconst DEFAULT_OPTION_TEMPLATES: Record<\n \"single-choice\" | \"multi-choice\",\n Array<Pick<QuizOption, \"label\" | \"value\">>\n> = {\n \"single-choice\": [\n { label: \"Option A\", value: \"a\" },\n { label: \"Option B\", value: \"b\" },\n ],\n \"multi-choice\": [\n { label: \"Option A\", value: \"a\" },\n { label: \"Option B\", value: \"b\" },\n ],\n}\n\nexport const useQuizBuilderStore = defineStore(\n \"gxp-adminkit/quizBuilder\",\n () => {\n const builders = ref<Record<string, QuizBuilderSchema>>({})\n const selections = ref<Record<string, QuizBuilderSelection>>({})\n\n function ensureBuilder(builderId: string): QuizBuilderSchema {\n if (!builders.value[builderId]) {\n builders.value[builderId] = emptySchema()\n selections.value[builderId] = { id: null }\n }\n return builders.value[builderId]!\n }\n\n function loadSchema(builderId: string, schema: QuizBuilderSchema): void {\n builders.value[builderId] = {\n title: schema.title ?? \"\",\n description: schema.description ?? \"\",\n passingScore: schema.passingScore ?? 0,\n questions: schema.questions.map((q) => ({\n ...q,\n options: q.options.map((o) => ({ ...o })),\n })),\n }\n selections.value[builderId] = { id: null }\n }\n\n function resetBuilder(builderId: string): void {\n delete builders.value[builderId]\n delete selections.value[builderId]\n }\n\n /**\n * Append a fresh question of `type`. Single/multi-choice come\n * pre-seeded with two empty options. Returns the new question's id.\n */\n function addQuestion(builderId: string, type: QuizQuestionType): string {\n const schema = ensureBuilder(builderId)\n const id = nextId(`q-${type}`)\n const options: QuizOption[] =\n type === \"free-text\"\n ? []\n : DEFAULT_OPTION_TEMPLATES[type].map((tpl) => ({\n id: nextId(\"opt\"),\n label: tpl.label,\n value: tpl.value,\n }))\n const question: QuizQuestion = {\n id,\n prompt: `New ${type} question`,\n type,\n options,\n required: false,\n }\n schema.questions = [...schema.questions, question]\n return id\n }\n\n /** Remove a question by id. */\n function removeQuestion(builderId: string, questionId: string): void {\n const schema = ensureBuilder(builderId)\n schema.questions = schema.questions.filter((q) => q.id !== questionId)\n const sel = selections.value[builderId]\n if (sel?.id === questionId) {\n selections.value[builderId] = { id: null }\n }\n }\n\n /** Patch a question's properties. */\n function updateQuestion(\n builderId: string,\n questionId: string,\n patch: Partial<Omit<QuizQuestion, \"id\">>,\n ): void {\n const schema = ensureBuilder(builderId)\n const idx = schema.questions.findIndex((q) => q.id === questionId)\n if (idx < 0) {\n return\n }\n const current = schema.questions[idx]!\n // Free-text questions don't carry options. If we are switching\n // type to free-text, drop them; if we are switching away from\n // free-text and the existing list is empty, seed two options.\n let nextOptions = current.options\n if (patch.type && patch.type !== current.type) {\n if (patch.type === \"free-text\") {\n nextOptions = []\n } else if (\n (patch.type === \"single-choice\" || patch.type === \"multi-choice\") &&\n current.options.length === 0\n ) {\n nextOptions = DEFAULT_OPTION_TEMPLATES[patch.type].map((tpl) => ({\n id: nextId(\"opt\"),\n label: tpl.label,\n value: tpl.value,\n }))\n }\n }\n const merged: QuizQuestion = {\n ...current,\n ...patch,\n options: patch.options ?? nextOptions,\n }\n const next = [...schema.questions]\n next[idx] = merged\n schema.questions = next\n }\n\n /** Append a new empty option to a question. Returns the option id. */\n function addOption(builderId: string, questionId: string): string {\n const schema = ensureBuilder(builderId)\n const idx = schema.questions.findIndex((q) => q.id === questionId)\n if (idx < 0) {\n return \"\"\n }\n const current = schema.questions[idx]!\n const optId = nextId(\"opt\")\n const newOption: QuizOption = {\n id: optId,\n label: `Option ${String.fromCharCode(65 + current.options.length)}`,\n value: \"\",\n }\n const next = [...schema.questions]\n next[idx] = { ...current, options: [...current.options, newOption] }\n schema.questions = next\n return optId\n }\n\n /** Remove an option from a question. */\n function removeOption(\n builderId: string,\n questionId: string,\n optionId: string,\n ): void {\n const schema = ensureBuilder(builderId)\n const idx = schema.questions.findIndex((q) => q.id === questionId)\n if (idx < 0) {\n return\n }\n const current = schema.questions[idx]!\n const next = [...schema.questions]\n next[idx] = {\n ...current,\n options: current.options.filter((o) => o.id !== optionId),\n }\n schema.questions = next\n }\n\n /** Patch an option's properties. */\n function updateOption(\n builderId: string,\n questionId: string,\n optionId: string,\n patch: Partial<Omit<QuizOption, \"id\">>,\n ): void {\n const schema = ensureBuilder(builderId)\n const idx = schema.questions.findIndex((q) => q.id === questionId)\n if (idx < 0) {\n return\n }\n const current = schema.questions[idx]!\n const optIdx = current.options.findIndex((o) => o.id === optionId)\n if (optIdx < 0) {\n return\n }\n const nextOptions = [...current.options]\n nextOptions[optIdx] = { ...nextOptions[optIdx]!, ...patch }\n // Single-choice quizzes can only have one correct answer at a\n // time. If a caller flags a new correct option, clear the others.\n if (patch.correct === true && current.type === \"single-choice\") {\n for (let i = 0; i < nextOptions.length; i++) {\n if (i !== optIdx) {\n nextOptions[i] = { ...nextOptions[i]!, correct: false }\n }\n }\n }\n const next = [...schema.questions]\n next[idx] = { ...current, options: nextOptions }\n schema.questions = next\n }\n\n /** Patch top-level quiz metadata (title, description, passingScore). */\n function updateMeta(\n builderId: string,\n patch: Partial<Pick<QuizBuilderSchema, \"title\" | \"description\" | \"passingScore\">>,\n ): void {\n const schema = ensureBuilder(builderId)\n builders.value[builderId] = { ...schema, ...patch }\n }\n\n function select(builderId: string, id: string | null): void {\n selections.value[builderId] = { id }\n }\n\n function getSelection(builderId: string): QuizBuilderSelection {\n return selections.value[builderId] ?? { id: null }\n }\n\n function getSchema(builderId: string): QuizBuilderSchema {\n return ensureBuilder(builderId)\n }\n\n return {\n builders,\n selections,\n ensureBuilder,\n loadSchema,\n resetBuilder,\n addQuestion,\n removeQuestion,\n updateQuestion,\n addOption,\n removeOption,\n updateOption,\n updateMeta,\n select,\n getSelection,\n getSchema,\n }\n },\n)\n\n/** Composable wrapping store access for a single builder instance. */\nexport function useQuizBuilder(builderId: string) {\n const store = useQuizBuilderStore()\n store.ensureBuilder(builderId)\n return {\n schema: computed<QuizBuilderSchema>(() => store.getSchema(builderId)),\n selection: computed<QuizBuilderSelection>(() =>\n store.getSelection(builderId),\n ),\n addQuestion: (type: QuizQuestionType) =>\n store.addQuestion(builderId, type),\n removeQuestion: (id: string) => store.removeQuestion(builderId, id),\n updateQuestion: (id: string, patch: Partial<Omit<QuizQuestion, \"id\">>) =>\n store.updateQuestion(builderId, id, patch),\n addOption: (questionId: string) => store.addOption(builderId, questionId),\n removeOption: (questionId: string, optionId: string) =>\n store.removeOption(builderId, questionId, optionId),\n updateOption: (\n questionId: string,\n optionId: string,\n patch: Partial<Omit<QuizOption, \"id\">>,\n ) => store.updateOption(builderId, questionId, optionId, patch),\n updateMeta: (\n patch: Partial<\n Pick<QuizBuilderSchema, \"title\" | \"description\" | \"passingScore\">\n >,\n ) => store.updateMeta(builderId, patch),\n select: (id: string | null) => store.select(builderId, id),\n loadSchema: (schema: QuizBuilderSchema) =>\n store.loadSchema(builderId, schema),\n reset: () => store.resetBuilder(builderId),\n }\n}\n"],"names":["idCounter","nextId","prefix","__resetQuizBuilderIdCounter","emptySchema","DEFAULT_OPTION_TEMPLATES","useQuizBuilderStore","defineStore","builders","ref","selections","ensureBuilder","builderId","loadSchema","schema","q","o","resetBuilder","addQuestion","type","id","options","tpl","question","removeQuestion","questionId","sel","updateQuestion","patch","idx","current","nextOptions","merged","next","addOption","optId","newOption","removeOption","optionId","updateOption","optIdx","i","updateMeta","select","getSelection","getSchema","useQuizBuilder","store","computed"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"quizBuilderStore.js","sources":["../../src/stores/quizBuilderStore.ts"],"sourcesContent":["import { defineStore } from \"pinia\"\nimport { computed, ref } from \"vue\"\n\nexport type QuizQuestionType = \"single-choice\" | \"multi-choice\" | \"free-text\"\n\nexport interface QuizOption {\n id: string\n label: string\n value: string | number\n correct?: boolean\n score?: number\n}\n\nexport interface QuizQuestion {\n id: string\n prompt: string\n type: QuizQuestionType\n options: QuizOption[]\n helpText?: string\n required?: boolean\n}\n\nexport interface QuizBuilderSchema {\n title?: string\n description?: string\n questions: QuizQuestion[]\n passingScore?: number\n}\n\n/** Identifies which question is currently selected. */\nexport interface QuizBuilderSelection {\n id: string | null\n}\n\nlet idCounter = 0\nfunction nextId(prefix: string): string {\n idCounter += 1\n return `${prefix}-${Date.now()}-${idCounter}`\n}\n\n/** Test helper to make ids deterministic. */\nexport function __resetQuizBuilderIdCounter(): void {\n idCounter = 0\n}\n\nfunction emptySchema(): QuizBuilderSchema {\n return {\n title: \"\",\n description: \"\",\n questions: [],\n passingScore: 0,\n }\n}\n\nconst DEFAULT_OPTION_TEMPLATES: Record<\n \"single-choice\" | \"multi-choice\",\n Array<Pick<QuizOption, \"label\" | \"value\">>\n> = {\n \"single-choice\": [\n { label: \"Option A\", value: \"a\" },\n { label: \"Option B\", value: \"b\" },\n ],\n \"multi-choice\": [\n { label: \"Option A\", value: \"a\" },\n { label: \"Option B\", value: \"b\" },\n ],\n}\n\nexport const useQuizBuilderStore = defineStore(\n \"gx-modui/quizBuilder\",\n () => {\n const builders = ref<Record<string, QuizBuilderSchema>>({})\n const selections = ref<Record<string, QuizBuilderSelection>>({})\n\n function ensureBuilder(builderId: string): QuizBuilderSchema {\n if (!builders.value[builderId]) {\n builders.value[builderId] = emptySchema()\n selections.value[builderId] = { id: null }\n }\n return builders.value[builderId]!\n }\n\n function loadSchema(builderId: string, schema: QuizBuilderSchema): void {\n builders.value[builderId] = {\n title: schema.title ?? \"\",\n description: schema.description ?? \"\",\n passingScore: schema.passingScore ?? 0,\n questions: schema.questions.map((q) => ({\n ...q,\n options: q.options.map((o) => ({ ...o })),\n })),\n }\n selections.value[builderId] = { id: null }\n }\n\n function resetBuilder(builderId: string): void {\n delete builders.value[builderId]\n delete selections.value[builderId]\n }\n\n /**\n * Append a fresh question of `type`. Single/multi-choice come\n * pre-seeded with two empty options. Returns the new question's id.\n */\n function addQuestion(builderId: string, type: QuizQuestionType): string {\n const schema = ensureBuilder(builderId)\n const id = nextId(`q-${type}`)\n const options: QuizOption[] =\n type === \"free-text\"\n ? []\n : DEFAULT_OPTION_TEMPLATES[type].map((tpl) => ({\n id: nextId(\"opt\"),\n label: tpl.label,\n value: tpl.value,\n }))\n const question: QuizQuestion = {\n id,\n prompt: `New ${type} question`,\n type,\n options,\n required: false,\n }\n schema.questions = [...schema.questions, question]\n return id\n }\n\n /** Remove a question by id. */\n function removeQuestion(builderId: string, questionId: string): void {\n const schema = ensureBuilder(builderId)\n schema.questions = schema.questions.filter((q) => q.id !== questionId)\n const sel = selections.value[builderId]\n if (sel?.id === questionId) {\n selections.value[builderId] = { id: null }\n }\n }\n\n /** Patch a question's properties. */\n function updateQuestion(\n builderId: string,\n questionId: string,\n patch: Partial<Omit<QuizQuestion, \"id\">>,\n ): void {\n const schema = ensureBuilder(builderId)\n const idx = schema.questions.findIndex((q) => q.id === questionId)\n if (idx < 0) {\n return\n }\n const current = schema.questions[idx]!\n // Free-text questions don't carry options. If we are switching\n // type to free-text, drop them; if we are switching away from\n // free-text and the existing list is empty, seed two options.\n let nextOptions = current.options\n if (patch.type && patch.type !== current.type) {\n if (patch.type === \"free-text\") {\n nextOptions = []\n } else if (\n (patch.type === \"single-choice\" || patch.type === \"multi-choice\") &&\n current.options.length === 0\n ) {\n nextOptions = DEFAULT_OPTION_TEMPLATES[patch.type].map((tpl) => ({\n id: nextId(\"opt\"),\n label: tpl.label,\n value: tpl.value,\n }))\n }\n }\n const merged: QuizQuestion = {\n ...current,\n ...patch,\n options: patch.options ?? nextOptions,\n }\n const next = [...schema.questions]\n next[idx] = merged\n schema.questions = next\n }\n\n /** Append a new empty option to a question. Returns the option id. */\n function addOption(builderId: string, questionId: string): string {\n const schema = ensureBuilder(builderId)\n const idx = schema.questions.findIndex((q) => q.id === questionId)\n if (idx < 0) {\n return \"\"\n }\n const current = schema.questions[idx]!\n const optId = nextId(\"opt\")\n const newOption: QuizOption = {\n id: optId,\n label: `Option ${String.fromCharCode(65 + current.options.length)}`,\n value: \"\",\n }\n const next = [...schema.questions]\n next[idx] = { ...current, options: [...current.options, newOption] }\n schema.questions = next\n return optId\n }\n\n /** Remove an option from a question. */\n function removeOption(\n builderId: string,\n questionId: string,\n optionId: string,\n ): void {\n const schema = ensureBuilder(builderId)\n const idx = schema.questions.findIndex((q) => q.id === questionId)\n if (idx < 0) {\n return\n }\n const current = schema.questions[idx]!\n const next = [...schema.questions]\n next[idx] = {\n ...current,\n options: current.options.filter((o) => o.id !== optionId),\n }\n schema.questions = next\n }\n\n /** Patch an option's properties. */\n function updateOption(\n builderId: string,\n questionId: string,\n optionId: string,\n patch: Partial<Omit<QuizOption, \"id\">>,\n ): void {\n const schema = ensureBuilder(builderId)\n const idx = schema.questions.findIndex((q) => q.id === questionId)\n if (idx < 0) {\n return\n }\n const current = schema.questions[idx]!\n const optIdx = current.options.findIndex((o) => o.id === optionId)\n if (optIdx < 0) {\n return\n }\n const nextOptions = [...current.options]\n nextOptions[optIdx] = { ...nextOptions[optIdx]!, ...patch }\n // Single-choice quizzes can only have one correct answer at a\n // time. If a caller flags a new correct option, clear the others.\n if (patch.correct === true && current.type === \"single-choice\") {\n for (let i = 0; i < nextOptions.length; i++) {\n if (i !== optIdx) {\n nextOptions[i] = { ...nextOptions[i]!, correct: false }\n }\n }\n }\n const next = [...schema.questions]\n next[idx] = { ...current, options: nextOptions }\n schema.questions = next\n }\n\n /** Patch top-level quiz metadata (title, description, passingScore). */\n function updateMeta(\n builderId: string,\n patch: Partial<Pick<QuizBuilderSchema, \"title\" | \"description\" | \"passingScore\">>,\n ): void {\n const schema = ensureBuilder(builderId)\n builders.value[builderId] = { ...schema, ...patch }\n }\n\n function select(builderId: string, id: string | null): void {\n selections.value[builderId] = { id }\n }\n\n function getSelection(builderId: string): QuizBuilderSelection {\n return selections.value[builderId] ?? { id: null }\n }\n\n function getSchema(builderId: string): QuizBuilderSchema {\n return ensureBuilder(builderId)\n }\n\n return {\n builders,\n selections,\n ensureBuilder,\n loadSchema,\n resetBuilder,\n addQuestion,\n removeQuestion,\n updateQuestion,\n addOption,\n removeOption,\n updateOption,\n updateMeta,\n select,\n getSelection,\n getSchema,\n }\n },\n)\n\n/** Composable wrapping store access for a single builder instance. */\nexport function useQuizBuilder(builderId: string) {\n const store = useQuizBuilderStore()\n store.ensureBuilder(builderId)\n return {\n schema: computed<QuizBuilderSchema>(() => store.getSchema(builderId)),\n selection: computed<QuizBuilderSelection>(() =>\n store.getSelection(builderId),\n ),\n addQuestion: (type: QuizQuestionType) =>\n store.addQuestion(builderId, type),\n removeQuestion: (id: string) => store.removeQuestion(builderId, id),\n updateQuestion: (id: string, patch: Partial<Omit<QuizQuestion, \"id\">>) =>\n store.updateQuestion(builderId, id, patch),\n addOption: (questionId: string) => store.addOption(builderId, questionId),\n removeOption: (questionId: string, optionId: string) =>\n store.removeOption(builderId, questionId, optionId),\n updateOption: (\n questionId: string,\n optionId: string,\n patch: Partial<Omit<QuizOption, \"id\">>,\n ) => store.updateOption(builderId, questionId, optionId, patch),\n updateMeta: (\n patch: Partial<\n Pick<QuizBuilderSchema, \"title\" | \"description\" | \"passingScore\">\n >,\n ) => store.updateMeta(builderId, patch),\n select: (id: string | null) => store.select(builderId, id),\n loadSchema: (schema: QuizBuilderSchema) =>\n store.loadSchema(builderId, schema),\n reset: () => store.resetBuilder(builderId),\n }\n}\n"],"names":["idCounter","nextId","prefix","__resetQuizBuilderIdCounter","emptySchema","DEFAULT_OPTION_TEMPLATES","useQuizBuilderStore","defineStore","builders","ref","selections","ensureBuilder","builderId","loadSchema","schema","q","o","resetBuilder","addQuestion","type","id","options","tpl","question","removeQuestion","questionId","sel","updateQuestion","patch","idx","current","nextOptions","merged","next","addOption","optId","newOption","removeOption","optionId","updateOption","optIdx","i","updateMeta","select","getSelection","getSchema","useQuizBuilder","store","computed"],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ export declare const REACTIVE_CANVAS_BLOCK_TYPES: readonly ["text-block", "image
|
|
|
31
31
|
export type ReactiveCanvasBlockType = (typeof REACTIVE_CANVAS_BLOCK_TYPES)[number];
|
|
32
32
|
/** Test helper to make ids deterministic. */
|
|
33
33
|
export declare function __resetReactiveCanvasBuilderIdCounter(): void;
|
|
34
|
-
export declare const useReactiveCanvasBuilderStore: import('pinia').StoreDefinition<"
|
|
34
|
+
export declare const useReactiveCanvasBuilderStore: import('pinia').StoreDefinition<"gx-modui/reactiveCanvasBuilder", Pick<{
|
|
35
35
|
builders: import('vue').Ref<Record<string, ReactiveCanvasBuilderSchema>, Record<string, ReactiveCanvasBuilderSchema>>;
|
|
36
36
|
selections: import('vue').Ref<Record<string, ReactiveCanvasBuilderSelection>, Record<string, ReactiveCanvasBuilderSelection>>;
|
|
37
37
|
ensureBuilder: (builderId: string) => ReactiveCanvasBuilderSchema;
|
|
@@ -38,66 +38,66 @@ function L(t) {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
const H = A(
|
|
41
|
-
"
|
|
41
|
+
"gx-modui/reactiveCanvasBuilder",
|
|
42
42
|
() => {
|
|
43
|
-
const t = k({}),
|
|
43
|
+
const t = k({}), o = k({});
|
|
44
44
|
function c(e) {
|
|
45
|
-
return t.value[e] || (t.value[e] = D(),
|
|
45
|
+
return t.value[e] || (t.value[e] = D(), o.value[e] = { id: null }), t.value[e];
|
|
46
46
|
}
|
|
47
|
-
function l(e,
|
|
47
|
+
function l(e, n) {
|
|
48
48
|
t.value[e] = {
|
|
49
|
-
width:
|
|
50
|
-
height:
|
|
51
|
-
blocks:
|
|
52
|
-
},
|
|
49
|
+
width: n.width,
|
|
50
|
+
height: n.height,
|
|
51
|
+
blocks: n.blocks.map((s) => ({ ...s, props: { ...s.props } }))
|
|
52
|
+
}, o.value[e] = { id: null };
|
|
53
53
|
}
|
|
54
54
|
function h(e) {
|
|
55
|
-
delete t.value[e], delete
|
|
55
|
+
delete t.value[e], delete o.value[e];
|
|
56
56
|
}
|
|
57
|
-
function v(e,
|
|
58
|
-
const s = c(e), a = b(`block-${
|
|
57
|
+
function v(e, n) {
|
|
58
|
+
const s = c(e), a = b(`block-${n}`);
|
|
59
59
|
return s.blocks = [
|
|
60
60
|
...s.blocks,
|
|
61
61
|
{
|
|
62
62
|
id: a,
|
|
63
|
-
type:
|
|
63
|
+
type: n,
|
|
64
64
|
x: 16,
|
|
65
65
|
y: 16,
|
|
66
66
|
width: w,
|
|
67
67
|
height: E,
|
|
68
|
-
props: L(
|
|
68
|
+
props: L(n)
|
|
69
69
|
}
|
|
70
70
|
], a;
|
|
71
71
|
}
|
|
72
|
-
function m(e,
|
|
72
|
+
function m(e, n) {
|
|
73
73
|
const s = c(e);
|
|
74
|
-
s.blocks = s.blocks.filter((i) => i.id !==
|
|
75
|
-
const a =
|
|
76
|
-
(a == null ? void 0 : a.id) ===
|
|
74
|
+
s.blocks = s.blocks.filter((i) => i.id !== n);
|
|
75
|
+
const a = o.value[e];
|
|
76
|
+
(a == null ? void 0 : a.id) === n && (o.value[e] = { id: null });
|
|
77
77
|
}
|
|
78
|
-
function d(e,
|
|
79
|
-
const a = c(e), i = a.blocks.findIndex((_) => _.id ===
|
|
78
|
+
function d(e, n, s) {
|
|
79
|
+
const a = c(e), i = a.blocks.findIndex((_) => _.id === n);
|
|
80
80
|
if (i < 0)
|
|
81
81
|
return;
|
|
82
82
|
const g = a.blocks[i], u = [...a.blocks];
|
|
83
83
|
u[i] = { ...g, ...s }, a.blocks = u;
|
|
84
84
|
}
|
|
85
|
-
function B(e,
|
|
85
|
+
function B(e, n) {
|
|
86
86
|
const s = c(e);
|
|
87
|
-
|
|
87
|
+
n.width !== void 0 && (s.width = n.width), n.height !== void 0 && (s.height = n.height);
|
|
88
88
|
}
|
|
89
|
-
function S(e,
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
function p(e) {
|
|
93
|
-
return n.value[e] ?? { id: null };
|
|
89
|
+
function S(e, n) {
|
|
90
|
+
o.value[e] = { id: n };
|
|
94
91
|
}
|
|
95
92
|
function C(e) {
|
|
93
|
+
return o.value[e] ?? { id: null };
|
|
94
|
+
}
|
|
95
|
+
function p(e) {
|
|
96
96
|
return c(e);
|
|
97
97
|
}
|
|
98
98
|
return {
|
|
99
99
|
builders: t,
|
|
100
|
-
selections:
|
|
100
|
+
selections: o,
|
|
101
101
|
ensureBuilder: c,
|
|
102
102
|
loadSchema: l,
|
|
103
103
|
resetBuilder: h,
|
|
@@ -106,27 +106,27 @@ const H = A(
|
|
|
106
106
|
updateBlock: d,
|
|
107
107
|
setCanvasSize: B,
|
|
108
108
|
select: S,
|
|
109
|
-
getSelection:
|
|
110
|
-
getSchema:
|
|
109
|
+
getSelection: C,
|
|
110
|
+
getSchema: p
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
113
|
);
|
|
114
114
|
function $(t) {
|
|
115
|
-
const
|
|
116
|
-
return
|
|
115
|
+
const o = H();
|
|
116
|
+
return o.ensureBuilder(t), {
|
|
117
117
|
schema: f(
|
|
118
|
-
() =>
|
|
118
|
+
() => o.getSchema(t)
|
|
119
119
|
),
|
|
120
120
|
selection: f(
|
|
121
|
-
() =>
|
|
121
|
+
() => o.getSelection(t)
|
|
122
122
|
),
|
|
123
|
-
addBlock: (c) =>
|
|
124
|
-
removeBlock: (c) =>
|
|
125
|
-
updateBlock: (c, l) =>
|
|
126
|
-
setCanvasSize: (c) =>
|
|
127
|
-
select: (c) =>
|
|
128
|
-
loadSchema: (c) =>
|
|
129
|
-
reset: () =>
|
|
123
|
+
addBlock: (c) => o.addBlock(t, c),
|
|
124
|
+
removeBlock: (c) => o.removeBlock(t, c),
|
|
125
|
+
updateBlock: (c, l) => o.updateBlock(t, c, l),
|
|
126
|
+
setCanvasSize: (c) => o.setCanvasSize(t, c),
|
|
127
|
+
select: (c) => o.select(t, c),
|
|
128
|
+
loadSchema: (c) => o.loadSchema(t, c),
|
|
129
|
+
reset: () => o.resetBuilder(t)
|
|
130
130
|
};
|
|
131
131
|
}
|
|
132
132
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactiveCanvasBuilderStore.js","sources":["../../src/stores/reactiveCanvasBuilderStore.ts"],"sourcesContent":["import { defineStore } from \"pinia\"\nimport { computed, ref } from \"vue\"\n\n/**\n * State for a single ReactiveCanvasBuilder instance. Multiple builders\n * can coexist on a page; each is keyed by `builderId`.\n *\n * A canvas is a fixed-size positioning surface. Blocks are absolutely\n * positioned by their `x` / `y` / `width` / `height`. Block `type`\n * resolves to a Vue component at runtime via a registry the consumer\n * supplies; for the MVP we treat `type` as an opaque string and let\n * the inspector edit it.\n */\n\nexport interface ReactiveCanvasBlock {\n id: string\n type: string\n x: number\n y: number\n width: number\n height: number\n props: Record<string, unknown>\n}\n\nexport interface ReactiveCanvasBuilderSchema {\n width: number\n height: number\n blocks: ReactiveCanvasBlock[]\n}\n\n/** Identifies which block is currently selected. */\nexport interface ReactiveCanvasBuilderSelection {\n id: string | null\n}\n\n/** Built-in block types exposed by the palette in the MVP. */\nexport const REACTIVE_CANVAS_BLOCK_TYPES = [\n \"text-block\",\n \"image-block\",\n \"button-block\",\n \"spacer-block\",\n \"container-block\",\n] as const\n\nexport type ReactiveCanvasBlockType =\n (typeof REACTIVE_CANVAS_BLOCK_TYPES)[number]\n\nconst DEFAULT_CANVAS_WIDTH = 800\nconst DEFAULT_CANVAS_HEIGHT = 600\nconst DEFAULT_BLOCK_WIDTH = 160\nconst DEFAULT_BLOCK_HEIGHT = 80\n\nlet idCounter = 0\nfunction nextId(prefix: string): string {\n idCounter += 1\n return `${prefix}-${Date.now()}-${idCounter}`\n}\n\n/** Test helper to make ids deterministic. */\nexport function __resetReactiveCanvasBuilderIdCounter(): void {\n idCounter = 0\n}\n\nfunction emptySchema(): ReactiveCanvasBuilderSchema {\n return {\n width: DEFAULT_CANVAS_WIDTH,\n height: DEFAULT_CANVAS_HEIGHT,\n blocks: [],\n }\n}\n\nfunction defaultPropsForType(type: string): Record<string, unknown> {\n switch (type) {\n case \"text-block\":\n return { text: \"Sample text\" }\n case \"image-block\":\n return { src: \"\", alt: \"\" }\n case \"button-block\":\n return { label: \"Click me\", action: \"\" }\n case \"spacer-block\":\n return {}\n case \"container-block\":\n return { padding: 8 }\n default:\n return {}\n }\n}\n\nexport const useReactiveCanvasBuilderStore = defineStore(\n \"gxp-adminkit/reactiveCanvasBuilder\",\n () => {\n const builders = ref<Record<string, ReactiveCanvasBuilderSchema>>({})\n const selections = ref<\n Record<string, ReactiveCanvasBuilderSelection>\n >({})\n\n function ensureBuilder(builderId: string): ReactiveCanvasBuilderSchema {\n if (!builders.value[builderId]) {\n builders.value[builderId] = emptySchema()\n selections.value[builderId] = { id: null }\n }\n return builders.value[builderId]!\n }\n\n function loadSchema(\n builderId: string,\n schema: ReactiveCanvasBuilderSchema,\n ): void {\n builders.value[builderId] = {\n width: schema.width,\n height: schema.height,\n blocks: schema.blocks.map((b) => ({ ...b, props: { ...b.props } })),\n }\n selections.value[builderId] = { id: null }\n }\n\n function resetBuilder(builderId: string): void {\n delete builders.value[builderId]\n delete selections.value[builderId]\n }\n\n /** Append a new block of `type` and return its id. */\n function addBlock(builderId: string, type: string): string {\n const schema = ensureBuilder(builderId)\n const id = nextId(`block-${type}`)\n schema.blocks = [\n ...schema.blocks,\n {\n id,\n type,\n x: 16,\n y: 16,\n width: DEFAULT_BLOCK_WIDTH,\n height: DEFAULT_BLOCK_HEIGHT,\n props: defaultPropsForType(type),\n },\n ]\n return id\n }\n\n function removeBlock(builderId: string, blockId: string): void {\n const schema = ensureBuilder(builderId)\n schema.blocks = schema.blocks.filter((b) => b.id !== blockId)\n const sel = selections.value[builderId]\n if (sel?.id === blockId) {\n selections.value[builderId] = { id: null }\n }\n }\n\n function updateBlock(\n builderId: string,\n blockId: string,\n patch: Partial<Omit<ReactiveCanvasBlock, \"id\">>,\n ): void {\n const schema = ensureBuilder(builderId)\n const idx = schema.blocks.findIndex((b) => b.id === blockId)\n if (idx < 0) {\n return\n }\n const current = schema.blocks[idx]!\n const list = [...schema.blocks]\n list[idx] = { ...current, ...patch }\n schema.blocks = list\n }\n\n function setCanvasSize(\n builderId: string,\n patch: { width?: number; height?: number },\n ): void {\n const schema = ensureBuilder(builderId)\n if (patch.width !== undefined) {\n schema.width = patch.width\n }\n if (patch.height !== undefined) {\n schema.height = patch.height\n }\n }\n\n function select(builderId: string, id: string | null): void {\n selections.value[builderId] = { id }\n }\n\n function getSelection(\n builderId: string,\n ): ReactiveCanvasBuilderSelection {\n return selections.value[builderId] ?? { id: null }\n }\n\n function getSchema(builderId: string): ReactiveCanvasBuilderSchema {\n return ensureBuilder(builderId)\n }\n\n return {\n builders,\n selections,\n ensureBuilder,\n loadSchema,\n resetBuilder,\n addBlock,\n removeBlock,\n updateBlock,\n setCanvasSize,\n select,\n getSelection,\n getSchema,\n }\n },\n)\n\n/** Composable wrapper around `useReactiveCanvasBuilderStore`. */\nexport function useReactiveCanvasBuilder(builderId: string) {\n const store = useReactiveCanvasBuilderStore()\n store.ensureBuilder(builderId)\n return {\n schema: computed<ReactiveCanvasBuilderSchema>(() =>\n store.getSchema(builderId),\n ),\n selection: computed<ReactiveCanvasBuilderSelection>(() =>\n store.getSelection(builderId),\n ),\n addBlock: (type: string) => store.addBlock(builderId, type),\n removeBlock: (id: string) => store.removeBlock(builderId, id),\n updateBlock: (\n id: string,\n patch: Partial<Omit<ReactiveCanvasBlock, \"id\">>,\n ) => store.updateBlock(builderId, id, patch),\n setCanvasSize: (patch: { width?: number; height?: number }) =>\n store.setCanvasSize(builderId, patch),\n select: (id: string | null) => store.select(builderId, id),\n loadSchema: (schema: ReactiveCanvasBuilderSchema) =>\n store.loadSchema(builderId, schema),\n reset: () => store.resetBuilder(builderId),\n }\n}\n"],"names":["REACTIVE_CANVAS_BLOCK_TYPES","DEFAULT_CANVAS_WIDTH","DEFAULT_CANVAS_HEIGHT","DEFAULT_BLOCK_WIDTH","DEFAULT_BLOCK_HEIGHT","idCounter","nextId","prefix","__resetReactiveCanvasBuilderIdCounter","emptySchema","defaultPropsForType","type","useReactiveCanvasBuilderStore","defineStore","builders","ref","selections","ensureBuilder","builderId","loadSchema","schema","b","resetBuilder","addBlock","id","removeBlock","blockId","sel","updateBlock","patch","idx","current","list","setCanvasSize","select","getSelection","getSchema","useReactiveCanvasBuilder","store","computed"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reactiveCanvasBuilderStore.js","sources":["../../src/stores/reactiveCanvasBuilderStore.ts"],"sourcesContent":["import { defineStore } from \"pinia\"\nimport { computed, ref } from \"vue\"\n\n/**\n * State for a single ReactiveCanvasBuilder instance. Multiple builders\n * can coexist on a page; each is keyed by `builderId`.\n *\n * A canvas is a fixed-size positioning surface. Blocks are absolutely\n * positioned by their `x` / `y` / `width` / `height`. Block `type`\n * resolves to a Vue component at runtime via a registry the consumer\n * supplies; for the MVP we treat `type` as an opaque string and let\n * the inspector edit it.\n */\n\nexport interface ReactiveCanvasBlock {\n id: string\n type: string\n x: number\n y: number\n width: number\n height: number\n props: Record<string, unknown>\n}\n\nexport interface ReactiveCanvasBuilderSchema {\n width: number\n height: number\n blocks: ReactiveCanvasBlock[]\n}\n\n/** Identifies which block is currently selected. */\nexport interface ReactiveCanvasBuilderSelection {\n id: string | null\n}\n\n/** Built-in block types exposed by the palette in the MVP. */\nexport const REACTIVE_CANVAS_BLOCK_TYPES = [\n \"text-block\",\n \"image-block\",\n \"button-block\",\n \"spacer-block\",\n \"container-block\",\n] as const\n\nexport type ReactiveCanvasBlockType =\n (typeof REACTIVE_CANVAS_BLOCK_TYPES)[number]\n\nconst DEFAULT_CANVAS_WIDTH = 800\nconst DEFAULT_CANVAS_HEIGHT = 600\nconst DEFAULT_BLOCK_WIDTH = 160\nconst DEFAULT_BLOCK_HEIGHT = 80\n\nlet idCounter = 0\nfunction nextId(prefix: string): string {\n idCounter += 1\n return `${prefix}-${Date.now()}-${idCounter}`\n}\n\n/** Test helper to make ids deterministic. */\nexport function __resetReactiveCanvasBuilderIdCounter(): void {\n idCounter = 0\n}\n\nfunction emptySchema(): ReactiveCanvasBuilderSchema {\n return {\n width: DEFAULT_CANVAS_WIDTH,\n height: DEFAULT_CANVAS_HEIGHT,\n blocks: [],\n }\n}\n\nfunction defaultPropsForType(type: string): Record<string, unknown> {\n switch (type) {\n case \"text-block\":\n return { text: \"Sample text\" }\n case \"image-block\":\n return { src: \"\", alt: \"\" }\n case \"button-block\":\n return { label: \"Click me\", action: \"\" }\n case \"spacer-block\":\n return {}\n case \"container-block\":\n return { padding: 8 }\n default:\n return {}\n }\n}\n\nexport const useReactiveCanvasBuilderStore = defineStore(\n \"gx-modui/reactiveCanvasBuilder\",\n () => {\n const builders = ref<Record<string, ReactiveCanvasBuilderSchema>>({})\n const selections = ref<\n Record<string, ReactiveCanvasBuilderSelection>\n >({})\n\n function ensureBuilder(builderId: string): ReactiveCanvasBuilderSchema {\n if (!builders.value[builderId]) {\n builders.value[builderId] = emptySchema()\n selections.value[builderId] = { id: null }\n }\n return builders.value[builderId]!\n }\n\n function loadSchema(\n builderId: string,\n schema: ReactiveCanvasBuilderSchema,\n ): void {\n builders.value[builderId] = {\n width: schema.width,\n height: schema.height,\n blocks: schema.blocks.map((b) => ({ ...b, props: { ...b.props } })),\n }\n selections.value[builderId] = { id: null }\n }\n\n function resetBuilder(builderId: string): void {\n delete builders.value[builderId]\n delete selections.value[builderId]\n }\n\n /** Append a new block of `type` and return its id. */\n function addBlock(builderId: string, type: string): string {\n const schema = ensureBuilder(builderId)\n const id = nextId(`block-${type}`)\n schema.blocks = [\n ...schema.blocks,\n {\n id,\n type,\n x: 16,\n y: 16,\n width: DEFAULT_BLOCK_WIDTH,\n height: DEFAULT_BLOCK_HEIGHT,\n props: defaultPropsForType(type),\n },\n ]\n return id\n }\n\n function removeBlock(builderId: string, blockId: string): void {\n const schema = ensureBuilder(builderId)\n schema.blocks = schema.blocks.filter((b) => b.id !== blockId)\n const sel = selections.value[builderId]\n if (sel?.id === blockId) {\n selections.value[builderId] = { id: null }\n }\n }\n\n function updateBlock(\n builderId: string,\n blockId: string,\n patch: Partial<Omit<ReactiveCanvasBlock, \"id\">>,\n ): void {\n const schema = ensureBuilder(builderId)\n const idx = schema.blocks.findIndex((b) => b.id === blockId)\n if (idx < 0) {\n return\n }\n const current = schema.blocks[idx]!\n const list = [...schema.blocks]\n list[idx] = { ...current, ...patch }\n schema.blocks = list\n }\n\n function setCanvasSize(\n builderId: string,\n patch: { width?: number; height?: number },\n ): void {\n const schema = ensureBuilder(builderId)\n if (patch.width !== undefined) {\n schema.width = patch.width\n }\n if (patch.height !== undefined) {\n schema.height = patch.height\n }\n }\n\n function select(builderId: string, id: string | null): void {\n selections.value[builderId] = { id }\n }\n\n function getSelection(\n builderId: string,\n ): ReactiveCanvasBuilderSelection {\n return selections.value[builderId] ?? { id: null }\n }\n\n function getSchema(builderId: string): ReactiveCanvasBuilderSchema {\n return ensureBuilder(builderId)\n }\n\n return {\n builders,\n selections,\n ensureBuilder,\n loadSchema,\n resetBuilder,\n addBlock,\n removeBlock,\n updateBlock,\n setCanvasSize,\n select,\n getSelection,\n getSchema,\n }\n },\n)\n\n/** Composable wrapper around `useReactiveCanvasBuilderStore`. */\nexport function useReactiveCanvasBuilder(builderId: string) {\n const store = useReactiveCanvasBuilderStore()\n store.ensureBuilder(builderId)\n return {\n schema: computed<ReactiveCanvasBuilderSchema>(() =>\n store.getSchema(builderId),\n ),\n selection: computed<ReactiveCanvasBuilderSelection>(() =>\n store.getSelection(builderId),\n ),\n addBlock: (type: string) => store.addBlock(builderId, type),\n removeBlock: (id: string) => store.removeBlock(builderId, id),\n updateBlock: (\n id: string,\n patch: Partial<Omit<ReactiveCanvasBlock, \"id\">>,\n ) => store.updateBlock(builderId, id, patch),\n setCanvasSize: (patch: { width?: number; height?: number }) =>\n store.setCanvasSize(builderId, patch),\n select: (id: string | null) => store.select(builderId, id),\n loadSchema: (schema: ReactiveCanvasBuilderSchema) =>\n store.loadSchema(builderId, schema),\n reset: () => store.resetBuilder(builderId),\n }\n}\n"],"names":["REACTIVE_CANVAS_BLOCK_TYPES","DEFAULT_CANVAS_WIDTH","DEFAULT_CANVAS_HEIGHT","DEFAULT_BLOCK_WIDTH","DEFAULT_BLOCK_HEIGHT","idCounter","nextId","prefix","__resetReactiveCanvasBuilderIdCounter","emptySchema","defaultPropsForType","type","useReactiveCanvasBuilderStore","defineStore","builders","ref","selections","ensureBuilder","builderId","loadSchema","schema","b","resetBuilder","addBlock","id","removeBlock","blockId","sel","updateBlock","patch","idx","current","list","setCanvasSize","select","getSelection","getSchema","useReactiveCanvasBuilder","store","computed"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[data-v-0217abb1] .cm-editor{height:100%}[data-v-0217abb1] .cm-editor.cm-focused{outline:none}[data-v-0217abb1] .cm-gutters{border-right-color:var(--border);background-color:var(--muted)}[data-v-0217abb1] .cm-activeLineGutter{background-color:color-mix(in oklch,var(--muted) 80%,var(--background))}[data-v-0217abb1] .cm-selectionBackground,[data-v-0217abb1] .cm-focused .cm-selectionBackground{background-color:color-mix(in oklch,var(--primary) 25%,transparent)!important}[data-v-0217abb1] .cm-cursor{border-left-color:var(--foreground)}[data-v-24f17d57] .html-editor-content table{border-collapse:collapse;margin:.5rem 0;overflow:hidden;table-layout:fixed;width:100%}[data-v-24f17d57] .html-editor-content table td,[data-v-24f17d57] .html-editor-content table th{border:2px solid var(--border);box-sizing:border-box;min-width:1em;padding:.375rem .5rem;position:relative;vertical-align:top}[data-v-24f17d57] .html-editor-content table th{background-color:var(--muted);font-weight:600;text-align:left}[data-v-24f17d57] .html-editor-content table .selectedCell:after{background:color-mix(in oklch,var(--primary) 15%,transparent);content:"";top:0;right:0;bottom:0;left:0;pointer-events:none;position:absolute;z-index:2}[data-v-24f17d57] .html-editor-content .tableWrapper{overflow-x:auto}[data-v-24f17d57] .html-editor-content .column-resize-handle{background-color:var(--primary);bottom:-2px;pointer-events:none;position:absolute;right:-2px;top:0;width:4px}[data-v-24f17d57] .html-editor-content .resize-cursor{cursor:col-resize}[data-v-24f17d57] .html-editor-content a{color:var(--primary);text-decoration:underline}[data-v-24f17d57] .html-editor-content img{display:block;margin:.75rem 0}[data-v-24f17d57] .html-editor-content img.ProseMirror-selectednode{outline:2px solid var(--primary);outline-offset:2px}[data-v-24f17d57] .html-editor-content blockquote{border-left:3px solid var(--border);color:var(--muted-foreground);font-style:italic;margin-left:0;padding-left:1rem}[data-v-24f17d57] .html-editor-content .ProseMirror-focused{outline:none}.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg{max-width:none!important;max-height:none!important}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none!important;max-height:none!important;width:auto;padding:0}.leaflet-container img.leaflet-tile{mix-blend-mode:plus-lighter}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}svg.leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline-offset:1px}.leaflet-container a{color:#0078a8}.leaflet-zoom-box{border:2px dotted #38f;background:#ffffff80}.leaflet-container{font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;font-size:.75rem;line-height:1.5}.leaflet-bar{box-shadow:0 1px 5px #000000a6;border-radius:4px}.leaflet-bar a{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover,.leaflet-bar a:focus{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:700 18px Lucida Console,Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px #0006;background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block;font-size:13px;font-size:1.08333em}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=)}.leaflet-container .leaflet-control-attribution{background:#fff;background:#fffc;margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333;line-height:1.4}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover,.leaflet-control-attribution a:focus{text-decoration:underline}.leaflet-attribution-flag{display:inline!important;vertical-align:baseline!important;width:1em;height:.6669em}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box;background:#fffc;text-shadow:1px 1px #fff}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 24px 13px 20px;line-height:1.3;font-size:13px;font-size:1.08333em;min-height:1px}.leaflet-popup-content p{margin:1.3em 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;pointer-events:auto;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px #0006}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;border:none;text-align:center;width:24px;height:24px;font:16px/24px Tahoma,Verdana,sans-serif;color:#757575;text-decoration:none;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover,.leaflet-container a.leaflet-popup-close-button:focus{color:#585858}.leaflet-popup-scrolled{overflow:auto}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=.70710678,M12=.70710678,M21=-.70710678,M22=.70710678)}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px #0006}.leaflet-tooltip.leaflet-interactive{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}@media print{.leaflet-control{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
|