@birdycom/omniaui-vue 0.0.0-stage → 0.11.0
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/LICENSE +21 -0
- package/README.md +48 -2
- package/dist/blocks/OcBlockAboutTimeline.vue.d.ts +29 -0
- package/dist/blocks/OcBlockAppHeader.vue.d.ts +33 -0
- package/dist/blocks/OcBlockAppShell.vue.d.ts +33 -0
- package/dist/blocks/OcBlockAuth.vue.d.ts +28 -0
- package/dist/blocks/OcBlockAuthSplit.vue.d.ts +45 -0
- package/dist/blocks/OcBlockContactGrid.vue.d.ts +32 -0
- package/dist/blocks/OcBlockCta.vue.d.ts +17 -0
- package/dist/blocks/OcBlockDataTable.vue.d.ts +33 -0
- package/dist/blocks/OcBlockFaq.vue.d.ts +32 -0
- package/dist/blocks/OcBlockFeatures.vue.d.ts +25 -0
- package/dist/blocks/OcBlockFooter.vue.d.ts +27 -0
- package/dist/blocks/OcBlockFormPage.vue.d.ts +36 -0
- package/dist/blocks/OcBlockHero.vue.d.ts +18 -0
- package/dist/blocks/OcBlockHeroCode.vue.d.ts +32 -0
- package/dist/blocks/OcBlockHeroOrbit.vue.d.ts +36 -0
- package/dist/blocks/OcBlockHeroSplit.vue.d.ts +19 -0
- package/dist/blocks/OcBlockModuleHeader.vue.d.ts +24 -0
- package/dist/blocks/OcBlockPageHero.vue.d.ts +18 -0
- package/dist/blocks/OcBlockPortfolioGrid.vue.d.ts +34 -0
- package/dist/blocks/OcBlockPricing.vue.d.ts +38 -0
- package/dist/blocks/OcBlockProcess.vue.d.ts +18 -0
- package/dist/blocks/OcBlockProductGrid.vue.d.ts +25 -0
- package/dist/blocks/OcBlockProfileHeader.vue.d.ts +36 -0
- package/dist/blocks/OcBlockShowcase.vue.d.ts +23 -0
- package/dist/blocks/OcBlockSiteFooter.vue.d.ts +42 -0
- package/dist/blocks/OcBlockSiteHeader.vue.d.ts +32 -0
- package/dist/blocks/OcBlockSpotlight.vue.d.ts +32 -0
- package/dist/blocks/OcBlockStats.vue.d.ts +10 -0
- package/dist/blocks/OcBlockStatsCounter.vue.d.ts +10 -0
- package/dist/blocks/OcBlockTeamList.vue.d.ts +42 -0
- package/dist/blocks/OcBlockTwoFactor.vue.d.ts +38 -0
- package/dist/blocks/OcBlockWizardDialog.vue.d.ts +52 -0
- package/dist/components/OcAccordion.vue.d.ts +15 -0
- package/dist/components/OcAccordionAccent.vue.d.ts +20 -0
- package/dist/components/OcAccordionItem.vue.d.ts +24 -0
- package/dist/components/OcAffixInput.vue.d.ts +31 -0
- package/dist/components/OcAlert.vue.d.ts +21 -0
- package/dist/components/OcAlertDialog.vue.d.ts +48 -0
- package/dist/components/OcAlphaTabs.vue.d.ts +23 -0
- package/dist/components/OcAspectRatio.vue.d.ts +16 -0
- package/dist/components/OcAttachment.vue.d.ts +26 -0
- package/dist/components/OcAttachmentImage.vue.d.ts +10 -0
- package/dist/components/OcAttachmentList.vue.d.ts +31 -0
- package/dist/components/OcAttachmentThumb.vue.d.ts +16 -0
- package/dist/components/OcAvatar.vue.d.ts +21 -0
- package/dist/components/OcAvatarGroup.vue.d.ts +12 -0
- package/dist/components/OcBackLink.vue.d.ts +18 -0
- package/dist/components/OcBadge.vue.d.ts +18 -0
- package/dist/components/OcBarcodeInput.vue.d.ts +27 -0
- package/dist/components/OcBreadcrumb.vue.d.ts +24 -0
- package/dist/components/OcBrowserFrame.vue.d.ts +35 -0
- package/dist/components/OcBusyOverlay.vue.d.ts +30 -0
- package/dist/components/OcButton.vue.d.ts +31 -0
- package/dist/components/OcButtonGroup.vue.d.ts +17 -0
- package/dist/components/OcButtonGroupText.vue.d.ts +12 -0
- package/dist/components/OcCard.vue.d.ts +27 -0
- package/dist/components/OcChartLine.vue.d.ts +28 -0
- package/dist/components/OcChatComposer.vue.d.ts +33 -0
- package/dist/components/OcCheckbox.vue.d.ts +26 -0
- package/dist/components/OcChecklist.vue.d.ts +32 -0
- package/dist/components/OcChipFilter.vue.d.ts +24 -0
- package/dist/components/OcCollapsible.vue.d.ts +28 -0
- package/dist/components/OcColorField.vue.d.ts +17 -0
- package/dist/components/OcColorSelect.vue.d.ts +24 -0
- package/dist/components/OcColumnMenu.vue.d.ts +31 -0
- package/dist/components/OcCommand.vue.d.ts +28 -0
- package/dist/components/OcConfirmDialog.vue.d.ts +44 -0
- package/dist/components/OcCookieConsent.vue.d.ts +52 -0
- package/dist/components/OcCopyField.vue.d.ts +14 -0
- package/dist/components/OcCounter.vue.d.ts +9 -0
- package/dist/components/OcDataTable.vue.d.ts +37 -0
- package/dist/components/OcDecimalInput.vue.d.ts +19 -0
- package/dist/components/OcDefinitionList.vue.d.ts +34 -0
- package/dist/components/OcDocViewer.vue.d.ts +24 -0
- package/dist/components/OcDropdown.vue.d.ts +19 -0
- package/dist/components/OcDropdownItem.vue.d.ts +18 -0
- package/dist/components/OcDropdownLabel.vue.d.ts +12 -0
- package/dist/components/OcDropdownSeparator.vue.d.ts +2 -0
- package/dist/components/OcDropzone.vue.d.ts +29 -0
- package/dist/components/OcEmojiPicker.vue.d.ts +32 -0
- package/dist/components/OcEmptyState.vue.d.ts +24 -0
- package/dist/components/OcEntityCard.vue.d.ts +37 -0
- package/dist/components/OcFactList.vue.d.ts +29 -0
- package/dist/components/OcFilterCounts.vue.d.ts +25 -0
- package/dist/components/OcFlipCard.vue.d.ts +31 -0
- package/dist/components/OcFormField.vue.d.ts +26 -0
- package/dist/components/OcGreeting.vue.d.ts +26 -0
- package/dist/components/OcHeading.vue.d.ts +24 -0
- package/dist/components/OcHoverCard.vue.d.ts +22 -0
- package/dist/components/OcImageZoom.vue.d.ts +28 -0
- package/dist/components/OcInput.vue.d.ts +13 -0
- package/dist/components/OcInputGroup.vue.d.ts +21 -0
- package/dist/components/OcItem.vue.d.ts +39 -0
- package/dist/components/OcItemGroup.vue.d.ts +12 -0
- package/dist/components/OcItemSeparator.vue.d.ts +2 -0
- package/dist/components/OcKbd.vue.d.ts +12 -0
- package/dist/components/OcKbdGroup.vue.d.ts +17 -0
- package/dist/components/OcLabel.vue.d.ts +19 -0
- package/dist/components/OcLanguageSelect.vue.d.ts +32 -0
- package/dist/components/OcLauncherCard.vue.d.ts +26 -0
- package/dist/components/OcLightbox.vue.d.ts +45 -0
- package/dist/components/OcLinkArrow.vue.d.ts +23 -0
- package/dist/components/OcListToolbar.vue.d.ts +44 -0
- package/dist/components/OcMarquee.vue.d.ts +16 -0
- package/dist/components/OcMediaCard.vue.d.ts +24 -0
- package/dist/components/OcMediaRow.vue.d.ts +21 -0
- package/dist/components/OcMediaThumb.vue.d.ts +32 -0
- package/dist/components/OcMessage.vue.d.ts +63 -0
- package/dist/components/OcMessageList.vue.d.ts +35 -0
- package/dist/components/OcMessageThread.vue.d.ts +80 -0
- package/dist/components/OcModal.vue.d.ts +36 -0
- package/dist/components/OcNavmenu.vue.d.ts +24 -0
- package/dist/components/OcNavmenuList.vue.d.ts +29 -0
- package/dist/components/OcNextTeaser.vue.d.ts +29 -0
- package/dist/components/OcNumberInput.vue.d.ts +25 -0
- package/dist/components/OcOtpInput.vue.d.ts +19 -0
- package/dist/components/OcPageHeader.vue.d.ts +36 -0
- package/dist/components/OcPagination.vue.d.ts +20 -0
- package/dist/components/OcPasswordInput.vue.d.ts +18 -0
- package/dist/components/OcPasswordRequirements.vue.d.ts +19 -0
- package/dist/components/OcPhoneInput.vue.d.ts +25 -0
- package/dist/components/OcPopover.vue.d.ts +24 -0
- package/dist/components/OcPriceCard.vue.d.ts +41 -0
- package/dist/components/OcProductMark.vue.d.ts +25 -0
- package/dist/components/OcProgress.vue.d.ts +11 -0
- package/dist/components/OcProjectCard.vue.d.ts +35 -0
- package/dist/components/OcProse.vue.d.ts +25 -0
- package/dist/components/OcRadio.vue.d.ts +27 -0
- package/dist/components/OcRadioGroup.vue.d.ts +32 -0
- package/dist/components/OcRecoveryCodes.vue.d.ts +36 -0
- package/dist/components/OcScrollArea.vue.d.ts +18 -0
- package/dist/components/OcSegmented.vue.d.ts +21 -0
- package/dist/components/OcSelect.vue.d.ts +28 -0
- package/dist/components/OcSeparator.vue.d.ts +21 -0
- package/dist/components/OcSeverityCard.vue.d.ts +36 -0
- package/dist/components/OcSheet.vue.d.ts +37 -0
- package/dist/components/OcSidebar.vue.d.ts +28 -0
- package/dist/components/OcSidebarCollapsible.vue.d.ts +27 -0
- package/dist/components/OcSidebarGroup.vue.d.ts +16 -0
- package/dist/components/OcSidebarMenu.vue.d.ts +12 -0
- package/dist/components/OcSidebarMenuButton.vue.d.ts +21 -0
- package/dist/components/OcSidebarSeparator.vue.d.ts +2 -0
- package/dist/components/OcSkeleton.vue.d.ts +8 -0
- package/dist/components/OcSlider.vue.d.ts +18 -0
- package/dist/components/OcSortableRow.vue.d.ts +32 -0
- package/dist/components/OcSpinner.vue.d.ts +8 -0
- package/dist/components/OcStackCard.vue.d.ts +22 -0
- package/dist/components/OcStackList.vue.d.ts +28 -0
- package/dist/components/OcStatCard.vue.d.ts +25 -0
- package/dist/components/OcStepper.vue.d.ts +24 -0
- package/dist/components/OcSwitch.vue.d.ts +9 -0
- package/dist/components/OcTable.vue.d.ts +61 -0
- package/dist/components/OcTableActions.vue.d.ts +18 -0
- package/dist/components/OcTableCompact.vue.d.ts +37 -0
- package/dist/components/OcTabs.vue.d.ts +28 -0
- package/dist/components/OcTagInput.vue.d.ts +18 -0
- package/dist/components/OcTerminalLog.vue.d.ts +20 -0
- package/dist/components/OcTextarea.vue.d.ts +13 -0
- package/dist/components/OcThemeSwitch.vue.d.ts +20 -0
- package/dist/components/OcTimeInput.vue.d.ts +14 -0
- package/dist/components/OcTimeline.vue.d.ts +33 -0
- package/dist/components/OcToast.vue.d.ts +31 -0
- package/dist/components/OcToastContainer.vue.d.ts +8 -0
- package/dist/components/OcToggle.vue.d.ts +29 -0
- package/dist/components/OcToggleField.vue.d.ts +27 -0
- package/dist/components/OcToggleGroup.vue.d.ts +27 -0
- package/dist/components/OcTooltip.vue.d.ts +16 -0
- package/dist/components/OcTopProgress.vue.d.ts +18 -0
- package/dist/components/OcTree.vue.d.ts +40 -0
- package/dist/components/OcUpgradeBanner.vue.d.ts +41 -0
- package/dist/components/OcUser.vue.d.ts +20 -0
- package/dist/components/OcVersionBanner.vue.d.ts +32 -0
- package/dist/composables/chartLine.d.ts +6 -0
- package/dist/composables/keys.d.ts +19 -0
- package/dist/composables/useAttrsSplit.d.ts +14 -0
- package/dist/composables/useDialog.d.ts +9 -0
- package/dist/composables/useToast.d.ts +34 -0
- package/dist/composables/useUid.d.ts +5 -0
- package/dist/index.d.ts +233 -0
- package/dist/omniaui-vue.js +8811 -0
- package/dist/omniaui-vue.js.map +1 -0
- package/manifest.json +1036 -0
- package/package.json +67 -4
- package/src/blocks/OcBlockAboutTimeline.vue +44 -0
- package/src/blocks/OcBlockAppHeader.vue +36 -0
- package/src/blocks/OcBlockAppShell.vue +29 -0
- package/src/blocks/OcBlockAuth.vue +24 -0
- package/src/blocks/OcBlockAuthSplit.vue +47 -0
- package/src/blocks/OcBlockContactGrid.vue +53 -0
- package/src/blocks/OcBlockCta.vue +12 -0
- package/src/blocks/OcBlockDataTable.vue +27 -0
- package/src/blocks/OcBlockFaq.vue +49 -0
- package/src/blocks/OcBlockFeatures.vue +23 -0
- package/src/blocks/OcBlockFooter.vue +25 -0
- package/src/blocks/OcBlockFormPage.vue +24 -0
- package/src/blocks/OcBlockHero.vue +13 -0
- package/src/blocks/OcBlockHeroCode.vue +42 -0
- package/src/blocks/OcBlockHeroOrbit.vue +69 -0
- package/src/blocks/OcBlockHeroSplit.vue +15 -0
- package/src/blocks/OcBlockModuleHeader.vue +21 -0
- package/src/blocks/OcBlockPageHero.vue +13 -0
- package/src/blocks/OcBlockPortfolioGrid.vue +63 -0
- package/src/blocks/OcBlockPricing.vue +39 -0
- package/src/blocks/OcBlockProcess.vue +39 -0
- package/src/blocks/OcBlockProductGrid.vue +41 -0
- package/src/blocks/OcBlockProfileHeader.vue +50 -0
- package/src/blocks/OcBlockShowcase.vue +43 -0
- package/src/blocks/OcBlockSiteFooter.vue +54 -0
- package/src/blocks/OcBlockSiteHeader.vue +34 -0
- package/src/blocks/OcBlockSpotlight.vue +47 -0
- package/src/blocks/OcBlockStats.vue +17 -0
- package/src/blocks/OcBlockStatsCounter.vue +20 -0
- package/src/blocks/OcBlockTeamList.vue +53 -0
- package/src/blocks/OcBlockTwoFactor.vue +61 -0
- package/src/blocks/OcBlockWizardDialog.vue +67 -0
- package/src/components/OcAccordion.vue +12 -0
- package/src/components/OcAccordionAccent.vue +27 -0
- package/src/components/OcAccordionItem.vue +19 -0
- package/src/components/OcAffixInput.vue +40 -0
- package/src/components/OcAlert.vue +17 -0
- package/src/components/OcAlertDialog.vue +66 -0
- package/src/components/OcAlphaTabs.vue +54 -0
- package/src/components/OcAspectRatio.vue +21 -0
- package/src/components/OcAttachment.vue +59 -0
- package/src/components/OcAttachmentImage.vue +13 -0
- package/src/components/OcAttachmentList.vue +31 -0
- package/src/components/OcAttachmentThumb.vue +14 -0
- package/src/components/OcAvatar.vue +18 -0
- package/src/components/OcAvatarGroup.vue +7 -0
- package/src/components/OcBackLink.vue +8 -0
- package/src/components/OcBadge.vue +13 -0
- package/src/components/OcBarcodeInput.vue +51 -0
- package/src/components/OcBreadcrumb.vue +22 -0
- package/src/components/OcBrowserFrame.vue +33 -0
- package/src/components/OcBusyOverlay.vue +32 -0
- package/src/components/OcButton.vue +47 -0
- package/src/components/OcButtonGroup.vue +10 -0
- package/src/components/OcButtonGroupText.vue +7 -0
- package/src/components/OcCard.vue +20 -0
- package/src/components/OcChartLine.vue +80 -0
- package/src/components/OcChatComposer.vue +42 -0
- package/src/components/OcCheckbox.vue +26 -0
- package/src/components/OcChecklist.vue +29 -0
- package/src/components/OcChipFilter.vue +48 -0
- package/src/components/OcCollapsible.vue +19 -0
- package/src/components/OcColorField.vue +15 -0
- package/src/components/OcColorSelect.vue +33 -0
- package/src/components/OcColumnMenu.vue +50 -0
- package/src/components/OcCommand.vue +119 -0
- package/src/components/OcConfirmDialog.vue +65 -0
- package/src/components/OcCookieConsent.vue +119 -0
- package/src/components/OcCopyField.vue +37 -0
- package/src/components/OcCounter.vue +15 -0
- package/src/components/OcDataTable.vue +144 -0
- package/src/components/OcDecimalInput.vue +53 -0
- package/src/components/OcDefinitionList.vue +35 -0
- package/src/components/OcDocViewer.vue +79 -0
- package/src/components/OcDropdown.vue +23 -0
- package/src/components/OcDropdownItem.vue +9 -0
- package/src/components/OcDropdownLabel.vue +7 -0
- package/src/components/OcDropdownSeparator.vue +7 -0
- package/src/components/OcDropzone.vue +36 -0
- package/src/components/OcEmojiPicker.vue +45 -0
- package/src/components/OcEmptyState.vue +13 -0
- package/src/components/OcEntityCard.vue +47 -0
- package/src/components/OcFactList.vue +37 -0
- package/src/components/OcFilterCounts.vue +38 -0
- package/src/components/OcFlipCard.vue +36 -0
- package/src/components/OcFormField.vue +36 -0
- package/src/components/OcGreeting.vue +52 -0
- package/src/components/OcHeading.vue +19 -0
- package/src/components/OcHoverCard.vue +25 -0
- package/src/components/OcImageZoom.vue +39 -0
- package/src/components/OcInput.vue +9 -0
- package/src/components/OcInputGroup.vue +12 -0
- package/src/components/OcItem.vue +40 -0
- package/src/components/OcItemGroup.vue +7 -0
- package/src/components/OcItemSeparator.vue +7 -0
- package/src/components/OcKbd.vue +7 -0
- package/src/components/OcKbdGroup.vue +15 -0
- package/src/components/OcLabel.vue +10 -0
- package/src/components/OcLanguageSelect.vue +40 -0
- package/src/components/OcLauncherCard.vue +34 -0
- package/src/components/OcLightbox.vue +63 -0
- package/src/components/OcLinkArrow.vue +25 -0
- package/src/components/OcListToolbar.vue +44 -0
- package/src/components/OcMarquee.vue +36 -0
- package/src/components/OcMediaCard.vue +28 -0
- package/src/components/OcMediaRow.vue +28 -0
- package/src/components/OcMediaThumb.vue +38 -0
- package/src/components/OcMessage.vue +91 -0
- package/src/components/OcMessageList.vue +43 -0
- package/src/components/OcMessageThread.vue +155 -0
- package/src/components/OcModal.vue +42 -0
- package/src/components/OcNavmenu.vue +18 -0
- package/src/components/OcNavmenuList.vue +38 -0
- package/src/components/OcNextTeaser.vue +25 -0
- package/src/components/OcNumberInput.vue +47 -0
- package/src/components/OcOtpInput.vue +34 -0
- package/src/components/OcPageHeader.vue +34 -0
- package/src/components/OcPagination.vue +33 -0
- package/src/components/OcPasswordInput.vue +27 -0
- package/src/components/OcPasswordRequirements.vue +28 -0
- package/src/components/OcPhoneInput.vue +72 -0
- package/src/components/OcPopover.vue +25 -0
- package/src/components/OcPriceCard.vue +69 -0
- package/src/components/OcProductMark.vue +31 -0
- package/src/components/OcProgress.vue +21 -0
- package/src/components/OcProjectCard.vue +36 -0
- package/src/components/OcProse.vue +57 -0
- package/src/components/OcRadio.vue +40 -0
- package/src/components/OcRadioGroup.vue +32 -0
- package/src/components/OcRecoveryCodes.vue +55 -0
- package/src/components/OcScrollArea.vue +15 -0
- package/src/components/OcSegmented.vue +28 -0
- package/src/components/OcSelect.vue +21 -0
- package/src/components/OcSeparator.vue +18 -0
- package/src/components/OcSeverityCard.vue +46 -0
- package/src/components/OcSheet.vue +49 -0
- package/src/components/OcSidebar.vue +16 -0
- package/src/components/OcSidebarCollapsible.vue +19 -0
- package/src/components/OcSidebarGroup.vue +11 -0
- package/src/components/OcSidebarMenu.vue +7 -0
- package/src/components/OcSidebarMenuButton.vue +31 -0
- package/src/components/OcSidebarSeparator.vue +7 -0
- package/src/components/OcSkeleton.vue +8 -0
- package/src/components/OcSlider.vue +27 -0
- package/src/components/OcSortableRow.vue +40 -0
- package/src/components/OcSpinner.vue +13 -0
- package/src/components/OcStackCard.vue +24 -0
- package/src/components/OcStackList.vue +31 -0
- package/src/components/OcStatCard.vue +39 -0
- package/src/components/OcStepper.vue +34 -0
- package/src/components/OcSwitch.vue +15 -0
- package/src/components/OcTable.vue +115 -0
- package/src/components/OcTableActions.vue +26 -0
- package/src/components/OcTableCompact.vue +46 -0
- package/src/components/OcTabs.vue +37 -0
- package/src/components/OcTagInput.vue +50 -0
- package/src/components/OcTerminalLog.vue +50 -0
- package/src/components/OcTextarea.vue +9 -0
- package/src/components/OcThemeSwitch.vue +31 -0
- package/src/components/OcTimeInput.vue +50 -0
- package/src/components/OcTimeline.vue +36 -0
- package/src/components/OcToast.vue +31 -0
- package/src/components/OcToastContainer.vue +21 -0
- package/src/components/OcToggle.vue +63 -0
- package/src/components/OcToggleField.vue +28 -0
- package/src/components/OcToggleGroup.vue +40 -0
- package/src/components/OcTooltip.vue +8 -0
- package/src/components/OcTopProgress.vue +54 -0
- package/src/components/OcTree.vue +70 -0
- package/src/components/OcUpgradeBanner.vue +42 -0
- package/src/components/OcUser.vue +25 -0
- package/src/components/OcVersionBanner.vue +34 -0
- package/src/composables/chartLine.ts +28 -0
- package/src/composables/keys.ts +22 -0
- package/src/composables/useAttrsSplit.ts +16 -0
- package/src/composables/useDialog.ts +21 -0
- package/src/composables/useToast.ts +66 -0
- package/src/composables/useUid.ts +12 -0
- package/src/index.ts +589 -0
package/package.json
CHANGED
|
@@ -1,6 +1,69 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@birdycom/omniaui-vue",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.11.0",
|
|
4
|
+
"description": "OmniaUI for Vue 3: one single-file component per OmniaUI component and block, rendering the exact markup of the CSS packages.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Serge Cools (Birdycom)",
|
|
8
|
+
"homepage": "https://omniaui.eu",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/Birdycom/OmniaUI.git",
|
|
12
|
+
"directory": "packages/vue"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/Birdycom/OmniaUI/issues"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"vue",
|
|
19
|
+
"vue3",
|
|
20
|
+
"components",
|
|
21
|
+
"css",
|
|
22
|
+
"omniaui"
|
|
23
|
+
],
|
|
24
|
+
"main": "./dist/omniaui-vue.js",
|
|
25
|
+
"module": "./dist/omniaui-vue.js",
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"exports": {
|
|
28
|
+
".": {
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"import": "./dist/omniaui-vue.js"
|
|
31
|
+
},
|
|
32
|
+
"./src/*": "./src/*",
|
|
33
|
+
"./manifest.json": "./manifest.json",
|
|
34
|
+
"./package.json": "./package.json"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"src",
|
|
39
|
+
"manifest.json",
|
|
40
|
+
"README.md",
|
|
41
|
+
"LICENSE"
|
|
42
|
+
],
|
|
43
|
+
"sideEffects": false,
|
|
44
|
+
"scripts": {
|
|
45
|
+
"generate": "node scripts/generate-index.mjs",
|
|
46
|
+
"build": "npm run generate && vite build && vue-tsc -p tsconfig.build.json --emitDeclarationOnly",
|
|
47
|
+
"typecheck": "vue-tsc --noEmit",
|
|
48
|
+
"test": "vitest run"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"vue": "^3.4.0"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@vitejs/plugin-vue": "^6.0.0",
|
|
55
|
+
"@vue/test-utils": "^2.4.6",
|
|
56
|
+
"jsdom": "^26.0.0",
|
|
57
|
+
"typescript": "^5.7.0",
|
|
58
|
+
"vite": "^7.0.0",
|
|
59
|
+
"vitest": "^3.0.0",
|
|
60
|
+
"vue": "^3.5.0",
|
|
61
|
+
"vue-tsc": "^2.2.0"
|
|
62
|
+
},
|
|
63
|
+
"engines": {
|
|
64
|
+
"node": ">=22"
|
|
65
|
+
},
|
|
66
|
+
"publishConfig": {
|
|
67
|
+
"access": "public"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!-- File: packages/vue/src/blocks/OcBlockAboutTimeline.vue | Map: props -> media (+ badge slot) -> copy (title, default slot) -> OcTimeline -->
|
|
2
|
+
<script setup lang="ts">
|
|
3
|
+
/**
|
|
4
|
+
* About section: picture with a badge next to the company story and a year timeline.
|
|
5
|
+
* `title` + `highlight` (gradient part), or the `title` slot. Slots: title, default (paragraphs), badge.
|
|
6
|
+
* Classes: .oc-block-about (--reverse), -inner, -media, -badge, -copy, -title + .oc-timeline
|
|
7
|
+
*/
|
|
8
|
+
import OcTimeline from '../components/OcTimeline.vue'
|
|
9
|
+
import type { TimelineEntry } from '../components/OcTimeline.vue'
|
|
10
|
+
import { useUid } from '../composables/useUid'
|
|
11
|
+
|
|
12
|
+
withDefaults(
|
|
13
|
+
defineProps<{
|
|
14
|
+
eyebrow?: string
|
|
15
|
+
title?: string
|
|
16
|
+
highlight?: string
|
|
17
|
+
timeline?: TimelineEntry[]
|
|
18
|
+
image?: string
|
|
19
|
+
imageAlt?: string
|
|
20
|
+
reverse?: boolean
|
|
21
|
+
}>(),
|
|
22
|
+
{ timeline: () => [], imageAlt: '' },
|
|
23
|
+
)
|
|
24
|
+
const titleId = useUid('oc-about-title')
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<template>
|
|
28
|
+
<section :class="['oc-block-about', reverse && 'oc-block-about--reverse']" :aria-labelledby="titleId">
|
|
29
|
+
<div class="oc-block-about-inner">
|
|
30
|
+
<figure class="oc-block-about-media" :aria-hidden="image ? undefined : 'true'">
|
|
31
|
+
<img v-if="image" :src="image" :alt="imageAlt" loading="lazy" />
|
|
32
|
+
<span v-if="$slots.badge" class="oc-block-about-badge"><slot name="badge" /></span>
|
|
33
|
+
</figure>
|
|
34
|
+
<div class="oc-block-about-copy">
|
|
35
|
+
<p v-if="eyebrow" class="oc-eyebrow">{{ eyebrow }}</p>
|
|
36
|
+
<h2 :id="titleId" class="oc-block-about-title">
|
|
37
|
+
<slot name="title">{{ title }} <span v-if="highlight" class="oc-text-gradient">{{ highlight }}</span></slot>
|
|
38
|
+
</h2>
|
|
39
|
+
<slot />
|
|
40
|
+
<OcTimeline v-if="timeline.length" :items="timeline" />
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</section>
|
|
44
|
+
</template>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Top bar with sidebar toggle, module navigation and user actions.
|
|
4
|
+
* `toggleFor` = id of the checkbox that collapses the sidebar (see OcBlockAppShell).
|
|
5
|
+
* Slots: toggle (replaces the default hamburger label), nav (replaces the items), title, actions.
|
|
6
|
+
* Classes: .oc-block-appbar, -nav, -actions, -title
|
|
7
|
+
*/
|
|
8
|
+
import OcNavmenuList, { type NavmenuItem } from '../components/OcNavmenuList.vue'
|
|
9
|
+
|
|
10
|
+
withDefaults(
|
|
11
|
+
defineProps<{
|
|
12
|
+
toggleFor?: string
|
|
13
|
+
toggleLabel?: string
|
|
14
|
+
navItems?: NavmenuItem[]
|
|
15
|
+
navLabel?: string
|
|
16
|
+
title?: string
|
|
17
|
+
}>(),
|
|
18
|
+
{ toggleLabel: 'Toggle sidebar', navLabel: 'Module navigation' },
|
|
19
|
+
)
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<template>
|
|
23
|
+
<header class="oc-block-appbar">
|
|
24
|
+
<slot name="toggle">
|
|
25
|
+
<label v-if="toggleFor" class="oc-btn oc-btn--ghost oc-btn--icon" :for="toggleFor" :title="toggleLabel">
|
|
26
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h16" /></svg>
|
|
27
|
+
<span class="oc-visually-hidden">{{ toggleLabel }}</span>
|
|
28
|
+
</label>
|
|
29
|
+
</slot>
|
|
30
|
+
<span v-if="title" class="oc-block-appbar-title">{{ title }}</span>
|
|
31
|
+
<nav v-if="navItems?.length || $slots.nav" class="oc-block-appbar-nav" :aria-label="navLabel">
|
|
32
|
+
<slot name="nav"><OcNavmenuList :items="navItems" /></slot>
|
|
33
|
+
</nav>
|
|
34
|
+
<div v-if="$slots.actions" class="oc-block-appbar-actions"><slot name="actions" /></div>
|
|
35
|
+
</header>
|
|
36
|
+
</template>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Application layout: sidebar, header bar, breadcrumb strip and scrolling content.
|
|
4
|
+
* v-model:collapsed drives the hidden checkbox (`toggleId`) that collapses the sidebar; point the header's
|
|
5
|
+
* toggle label at the same id. `height` sets --oc-block-shell-height (default 100dvh).
|
|
6
|
+
* Slots: sidebar (an OcSidebar), header (an OcBlockAppHeader), breadcrumbs, default (content).
|
|
7
|
+
* Classes: .oc-block-shell, -toggle, -main, -breadcrumbs, -content
|
|
8
|
+
*/
|
|
9
|
+
import { computed } from 'vue'
|
|
10
|
+
|
|
11
|
+
const props = withDefaults(defineProps<{ toggleId?: string; height?: string; toggleLabel?: string }>(), {
|
|
12
|
+
toggleId: 'oc-shell-toggle',
|
|
13
|
+
toggleLabel: 'Collapse sidebar',
|
|
14
|
+
})
|
|
15
|
+
const collapsed = defineModel<boolean>('collapsed', { default: false })
|
|
16
|
+
const style = computed(() => (props.height ? { '--oc-block-shell-height': props.height } : undefined))
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<div class="oc-block-shell" :style="style">
|
|
21
|
+
<input :id="toggleId" v-model="collapsed" class="oc-block-shell-toggle" type="checkbox" :aria-label="toggleLabel" />
|
|
22
|
+
<slot name="sidebar" />
|
|
23
|
+
<div class="oc-block-shell-main">
|
|
24
|
+
<slot name="header" />
|
|
25
|
+
<div v-if="$slots.breadcrumbs" class="oc-block-shell-breadcrumbs"><slot name="breadcrumbs" /></div>
|
|
26
|
+
<main class="oc-block-shell-content"><slot /></main>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</template>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Sign-in card. Slots: default (fields, e.g. .oc-form-group blocks), actions (primary button),
|
|
4
|
+
* social (alternative sign-in buttons, shown under the divider text), footer.
|
|
5
|
+
* Classes: .oc-block-auth, -card, -divider, -footer, .oc-block-subtitle
|
|
6
|
+
*/
|
|
7
|
+
defineProps<{ title?: string; subtitle?: string; divider?: string }>()
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<div class="oc-block-auth">
|
|
12
|
+
<div class="oc-block-auth-card">
|
|
13
|
+
<h2 v-if="title">{{ title }}</h2>
|
|
14
|
+
<p v-if="subtitle" class="oc-block-subtitle">{{ subtitle }}</p>
|
|
15
|
+
<slot />
|
|
16
|
+
<slot name="actions" />
|
|
17
|
+
<template v-if="$slots.social">
|
|
18
|
+
<div v-if="divider" class="oc-block-auth-divider">{{ divider }}</div>
|
|
19
|
+
<slot name="social" />
|
|
20
|
+
</template>
|
|
21
|
+
</div>
|
|
22
|
+
<div v-if="$slots.footer" class="oc-block-auth-footer"><slot name="footer" /></div>
|
|
23
|
+
</div>
|
|
24
|
+
</template>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Sign-in with a brand panel (logo, quote) next to the form. Emits `submit` (the native submit event).
|
|
4
|
+
* Slots: logo, quote (or `quote` + `quoteAuthor` props), default (fields), row (remember me / forgot password),
|
|
5
|
+
* submit (default: a full-width primary button with `submitLabel`), footer.
|
|
6
|
+
* Classes: .oc-block-authsplit, -brand, -logo, -quote, -form, -card, -title, -subtitle, -fields, -row
|
|
7
|
+
*/
|
|
8
|
+
withDefaults(
|
|
9
|
+
defineProps<{
|
|
10
|
+
title?: string
|
|
11
|
+
subtitle?: string
|
|
12
|
+
quote?: string
|
|
13
|
+
quoteAuthor?: string
|
|
14
|
+
submitLabel?: string
|
|
15
|
+
action?: string
|
|
16
|
+
method?: string
|
|
17
|
+
}>(),
|
|
18
|
+
{ submitLabel: 'Sign in', action: '#', method: 'post' },
|
|
19
|
+
)
|
|
20
|
+
defineEmits<{ submit: [event: SubmitEvent] }>()
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<div class="oc-block-authsplit">
|
|
25
|
+
<aside class="oc-block-authsplit-brand">
|
|
26
|
+
<a v-if="$slots.logo" class="oc-block-authsplit-logo" href="/"><slot name="logo" /></a>
|
|
27
|
+
<blockquote v-if="quote || $slots.quote" class="oc-block-authsplit-quote">
|
|
28
|
+
<slot name="quote">
|
|
29
|
+
<p>{{ quote }}</p>
|
|
30
|
+
<footer v-if="quoteAuthor">{{ quoteAuthor }}</footer>
|
|
31
|
+
</slot>
|
|
32
|
+
</blockquote>
|
|
33
|
+
</aside>
|
|
34
|
+
<div class="oc-block-authsplit-form">
|
|
35
|
+
<form class="oc-block-authsplit-card" :action="action" :method="method" @submit="$emit('submit', $event)">
|
|
36
|
+
<h1 v-if="title" class="oc-block-authsplit-title">{{ title }}</h1>
|
|
37
|
+
<p v-if="subtitle" class="oc-block-authsplit-subtitle">{{ subtitle }}</p>
|
|
38
|
+
<div class="oc-block-authsplit-fields">
|
|
39
|
+
<slot />
|
|
40
|
+
<div v-if="$slots.row" class="oc-block-authsplit-row"><slot name="row" /></div>
|
|
41
|
+
<slot name="submit"><button class="oc-btn" type="submit" style="width: 100%">{{ submitLabel }}</button></slot>
|
|
42
|
+
</div>
|
|
43
|
+
<slot name="footer" />
|
|
44
|
+
</form>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</template>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!-- File: packages/vue/src/blocks/OcBlockContactGrid.vue | Map: props -> head -> grid -> cards (mark, title, lines) -->
|
|
2
|
+
<script setup lang="ts">
|
|
3
|
+
/**
|
|
4
|
+
* Contact info cards (e-mail, phone, address, hours). A card with `address: true` renders as <address>.
|
|
5
|
+
* Slot: default (own cards). Classes: .oc-block-contact (--plain), -head, -heading, -lead, -grid, -card, -title, -line
|
|
6
|
+
*/
|
|
7
|
+
import { useUid } from '../composables/useUid'
|
|
8
|
+
|
|
9
|
+
export interface ContactGridLine {
|
|
10
|
+
text: string
|
|
11
|
+
href?: string
|
|
12
|
+
}
|
|
13
|
+
export interface ContactGridCard {
|
|
14
|
+
title: string
|
|
15
|
+
lines: ContactGridLine[]
|
|
16
|
+
icon?: string
|
|
17
|
+
accent?: string
|
|
18
|
+
address?: boolean
|
|
19
|
+
}
|
|
20
|
+
withDefaults(
|
|
21
|
+
defineProps<{
|
|
22
|
+
eyebrow?: string
|
|
23
|
+
title?: string
|
|
24
|
+
lead?: string
|
|
25
|
+
cards?: ContactGridCard[]
|
|
26
|
+
plain?: boolean
|
|
27
|
+
}>(),
|
|
28
|
+
{ cards: () => [] },
|
|
29
|
+
)
|
|
30
|
+
const titleId = useUid('oc-contact-title')
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<template>
|
|
34
|
+
<section :class="['oc-block-contact', plain && 'oc-block-contact--plain']" :aria-labelledby="title ? titleId : undefined">
|
|
35
|
+
<div v-if="eyebrow || title || lead" class="oc-block-contact-head">
|
|
36
|
+
<p v-if="eyebrow" class="oc-eyebrow">{{ eyebrow }}</p>
|
|
37
|
+
<h2 v-if="title" :id="titleId" class="oc-block-contact-heading">{{ title }}</h2>
|
|
38
|
+
<p v-if="lead" class="oc-block-contact-lead">{{ lead }}</p>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="oc-block-contact-grid">
|
|
41
|
+
<slot>
|
|
42
|
+
<component :is="card.address ? 'address' : 'article'" v-for="(card, i) in cards" :key="i" class="oc-block-contact-card">
|
|
43
|
+
<span v-if="card.icon" :class="['oc-product-mark oc-product-mark--sm oc-product-mark--soft', card.accent && `oc-accent--${card.accent}`]" aria-hidden="true">{{ card.icon }}</span>
|
|
44
|
+
<component :is="card.address ? 'span' : 'h3'" class="oc-block-contact-title">{{ card.title }}</component>
|
|
45
|
+
<template v-for="(line, j) in card.lines" :key="j">
|
|
46
|
+
<a v-if="line.href" class="oc-block-contact-line" :href="line.href">{{ line.text }}</a>
|
|
47
|
+
<component :is="card.address ? 'span' : 'p'" v-else class="oc-block-contact-line">{{ line.text }}</component>
|
|
48
|
+
</template>
|
|
49
|
+
</component>
|
|
50
|
+
</slot>
|
|
51
|
+
</div>
|
|
52
|
+
</section>
|
|
53
|
+
</template>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/** Call to action banner. Slot `actions` holds the buttons (inside .oc-block-hero-actions). */
|
|
3
|
+
defineProps<{ title?: string; text?: string }>()
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<template>
|
|
7
|
+
<div class="oc-block-cta">
|
|
8
|
+
<h2 v-if="title">{{ title }}</h2>
|
|
9
|
+
<p v-if="text">{{ text }}</p>
|
|
10
|
+
<div v-if="$slots.actions" class="oc-block-hero-actions"><slot name="actions" /></div>
|
|
11
|
+
</div>
|
|
12
|
+
</template>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Card with title, actions, toolbar, table, bulk bar and footer. Put an <OcTable> in the default slot.
|
|
4
|
+
* Slots: actions (header buttons), toolbar (.oc-table-toolbar content: search, filter pills, columns popover),
|
|
5
|
+
* bulk (selection bar, shown when `selectedCount` > 0), default (table), footer (.oc-table-footer: entries text, page size, pagination).
|
|
6
|
+
* Classes: .oc-card.oc-block-datatable, -head, -title, -description, -body, -bulk, .oc-table-toolbar, .oc-table-footer
|
|
7
|
+
*/
|
|
8
|
+
defineProps<{ title?: string; description?: string; selectedCount?: number }>()
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<section class="oc-card oc-block-datatable">
|
|
13
|
+
<header v-if="title || description || $slots.actions" class="oc-block-datatable-head">
|
|
14
|
+
<div>
|
|
15
|
+
<h2 v-if="title" class="oc-block-datatable-title">{{ title }}</h2>
|
|
16
|
+
<p v-if="description" class="oc-block-datatable-description">{{ description }}</p>
|
|
17
|
+
</div>
|
|
18
|
+
<div v-if="$slots.actions"><slot name="actions" /></div>
|
|
19
|
+
</header>
|
|
20
|
+
<div class="oc-block-datatable-body">
|
|
21
|
+
<div v-if="$slots.toolbar" class="oc-table-toolbar"><slot name="toolbar" /></div>
|
|
22
|
+
<div v-if="$slots.bulk && selectedCount" class="oc-block-datatable-bulk"><slot name="bulk" :count="selectedCount" /></div>
|
|
23
|
+
<slot />
|
|
24
|
+
<div v-if="$slots.footer" class="oc-table-footer"><slot name="footer" /></div>
|
|
25
|
+
</div>
|
|
26
|
+
</section>
|
|
27
|
+
</template>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!-- File: packages/vue/src/blocks/OcBlockFaq.vue | Map: props -> section.oc-block-faq -> head -> accordion (details name) -> more slot -->
|
|
2
|
+
<script setup lang="ts">
|
|
3
|
+
/**
|
|
4
|
+
* FAQ section: title + exclusive accordion on native <details name> (no JavaScript).
|
|
5
|
+
* Slots: lead, default (own details items), more. Classes: .oc-block-faq (--split), -inner, -head, -title, -lead, -list, -more
|
|
6
|
+
*/
|
|
7
|
+
import { useUid } from '../composables/useUid'
|
|
8
|
+
|
|
9
|
+
export interface FaqItem {
|
|
10
|
+
question: string
|
|
11
|
+
answer: string
|
|
12
|
+
}
|
|
13
|
+
const props = withDefaults(
|
|
14
|
+
defineProps<{
|
|
15
|
+
eyebrow?: string
|
|
16
|
+
title: string
|
|
17
|
+
lead?: string
|
|
18
|
+
items?: FaqItem[]
|
|
19
|
+
openIndex?: number
|
|
20
|
+
split?: boolean
|
|
21
|
+
name?: string
|
|
22
|
+
}>(),
|
|
23
|
+
{ items: () => [], openIndex: 0 },
|
|
24
|
+
)
|
|
25
|
+
const titleId = useUid('oc-faq-title')
|
|
26
|
+
const autoGroup = useUid('oc-faq')
|
|
27
|
+
const group = props.name ?? autoGroup
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<template>
|
|
31
|
+
<section :class="['oc-block-faq', split && 'oc-block-faq--split']" :aria-labelledby="titleId">
|
|
32
|
+
<div class="oc-block-faq-inner">
|
|
33
|
+
<div class="oc-block-faq-head">
|
|
34
|
+
<p v-if="eyebrow" class="oc-eyebrow">{{ eyebrow }}</p>
|
|
35
|
+
<h2 :id="titleId" class="oc-block-faq-title">{{ title }}</h2>
|
|
36
|
+
<p v-if="lead || $slots.lead" class="oc-block-faq-lead"><slot name="lead">{{ lead }}</slot></p>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="oc-accordion oc-block-faq-list">
|
|
39
|
+
<slot>
|
|
40
|
+
<details v-for="(item, i) in items" :key="i" class="oc-accordion-item" :name="group" :open="i === openIndex">
|
|
41
|
+
<summary class="oc-accordion-trigger">{{ item.question }}</summary>
|
|
42
|
+
<div class="oc-accordion-content">{{ item.answer }}</div>
|
|
43
|
+
</details>
|
|
44
|
+
</slot>
|
|
45
|
+
</div>
|
|
46
|
+
<p v-if="$slots.more" class="oc-block-faq-more"><slot name="more" /></p>
|
|
47
|
+
</div>
|
|
48
|
+
</section>
|
|
49
|
+
</template>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/** Feature grid with icons. Slot `icon` (scoped: { item }) overrides the glyph. Classes: .oc-block-features, -grid, .oc-block-feature-card, -icon */
|
|
3
|
+
export interface FeatureItem {
|
|
4
|
+
icon?: string
|
|
5
|
+
title: string
|
|
6
|
+
text: string
|
|
7
|
+
}
|
|
8
|
+
defineProps<{ title?: string; description?: string; items: FeatureItem[] }>()
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<div class="oc-block-features">
|
|
13
|
+
<h2 v-if="title">{{ title }}</h2>
|
|
14
|
+
<p v-if="description">{{ description }}</p>
|
|
15
|
+
<div class="oc-block-features-grid">
|
|
16
|
+
<div v-for="(item, i) in items" :key="i" class="oc-block-feature-card">
|
|
17
|
+
<div class="oc-block-feature-icon"><slot name="icon" :item="item">{{ item.icon }}</slot></div>
|
|
18
|
+
<h3>{{ item.title }}</h3>
|
|
19
|
+
<p>{{ item.text }}</p>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
</template>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/** Multi-column site footer. Slots: bottom-start, bottom-end (default text via `copyright` / `credit`). Classes: .oc-block-footer, -grid, -col, -bottom */
|
|
3
|
+
export interface FooterColumn {
|
|
4
|
+
title: string
|
|
5
|
+
links: { label: string; href: string }[]
|
|
6
|
+
}
|
|
7
|
+
defineProps<{ columns: FooterColumn[]; copyright?: string; credit?: string }>()
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<div class="oc-block-footer">
|
|
12
|
+
<div class="oc-block-footer-grid">
|
|
13
|
+
<div v-for="col in columns" :key="col.title" class="oc-block-footer-col">
|
|
14
|
+
<h4>{{ col.title }}</h4>
|
|
15
|
+
<ul>
|
|
16
|
+
<li v-for="link in col.links" :key="link.href + link.label"><a :href="link.href">{{ link.label }}</a></li>
|
|
17
|
+
</ul>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
<div v-if="copyright || credit || $slots['bottom-start'] || $slots['bottom-end']" class="oc-block-footer-bottom">
|
|
21
|
+
<span><slot name="bottom-start">{{ copyright }}</slot></span>
|
|
22
|
+
<span><slot name="bottom-end">{{ credit }}</slot></span>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</template>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Collapsible form sections with a sticky action bar. Default slot = sections (OcCollapsible containing a
|
|
4
|
+
* `<div class="oc-block-formpage-grid">` for the two-column field grid). Emits `submit`.
|
|
5
|
+
* Slot `actions` replaces the default Cancel / Save buttons. Classes: .oc-block-formpage, -grid, -actions
|
|
6
|
+
*/
|
|
7
|
+
withDefaults(
|
|
8
|
+
defineProps<{ cancelLabel?: string; submitLabel?: string; action?: string; method?: string }>(),
|
|
9
|
+
{ cancelLabel: 'Cancel', submitLabel: 'Save', action: '#', method: 'post' },
|
|
10
|
+
)
|
|
11
|
+
defineEmits<{ submit: [event: SubmitEvent]; cancel: [] }>()
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<template>
|
|
15
|
+
<form class="oc-block-formpage" :action="action" :method="method" @submit="$emit('submit', $event)">
|
|
16
|
+
<slot />
|
|
17
|
+
<div class="oc-block-formpage-actions">
|
|
18
|
+
<slot name="actions">
|
|
19
|
+
<button class="oc-btn oc-btn--outline" type="button" @click="$emit('cancel')">{{ cancelLabel }}</button>
|
|
20
|
+
<button class="oc-btn" type="submit">{{ submitLabel }}</button>
|
|
21
|
+
</slot>
|
|
22
|
+
</div>
|
|
23
|
+
</form>
|
|
24
|
+
</template>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/** Centered hero with badge, headline, text and actions. Classes: .oc-block-hero, -badge, -actions */
|
|
3
|
+
defineProps<{ badge?: string; title?: string; text?: string }>()
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<template>
|
|
7
|
+
<div class="oc-block-hero">
|
|
8
|
+
<span v-if="badge" class="oc-block-hero-badge">{{ badge }}</span>
|
|
9
|
+
<h1 v-if="title">{{ title }}</h1>
|
|
10
|
+
<p v-if="text">{{ text }}</p>
|
|
11
|
+
<div v-if="$slots.actions" class="oc-block-hero-actions"><slot name="actions" /></div>
|
|
12
|
+
</div>
|
|
13
|
+
</template>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Landing hero: eyebrow, display title with a gradient word, lead, buttons and a code window with floating icon tiles.
|
|
4
|
+
* `title` + `highlight` (gradient word) + `titleEnd`, or the `title` slot. Slots: lead, actions, visual (replaces the code window).
|
|
5
|
+
* Classes: .oc-section-pad, .oc-container, .oc-split, .oc-eyebrow, .oc-display, .oc-text-gradient, .oc-lead, .oc-code-window
|
|
6
|
+
*/
|
|
7
|
+
defineProps<{
|
|
8
|
+
eyebrow?: string
|
|
9
|
+
title?: string
|
|
10
|
+
highlight?: string
|
|
11
|
+
titleEnd?: string
|
|
12
|
+
lead?: string
|
|
13
|
+
code?: string
|
|
14
|
+
codeTitle?: string
|
|
15
|
+
}>()
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<template>
|
|
19
|
+
<section class="oc-section-pad">
|
|
20
|
+
<div class="oc-container oc-split">
|
|
21
|
+
<div>
|
|
22
|
+
<p v-if="eyebrow" class="oc-eyebrow">{{ eyebrow }}</p>
|
|
23
|
+
<h1 class="oc-display">
|
|
24
|
+
<slot name="title">{{ title }} <span v-if="highlight" class="oc-text-gradient">{{ highlight }}</span>{{ titleEnd }}</slot>
|
|
25
|
+
</h1>
|
|
26
|
+
<p v-if="lead || $slots.lead" class="oc-lead"><slot name="lead">{{ lead }}</slot></p>
|
|
27
|
+
<div v-if="$slots.actions" class="flex flex-wrap gap-1 mt-2"><slot name="actions" /></div>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="relative p-2">
|
|
30
|
+
<slot name="visual">
|
|
31
|
+
<span class="oc-icon-tile oc-icon-tile--float oc-accent--green absolute" style="inset: -0.5rem auto auto 8%" aria-hidden="true">◆</span>
|
|
32
|
+
<span class="oc-icon-tile oc-icon-tile--float oc-accent--violet absolute" style="inset: 0 6% auto auto; animation-delay: -2s" aria-hidden="true">◉</span>
|
|
33
|
+
<span class="oc-icon-tile oc-icon-tile--float oc-accent--orange absolute" style="inset: auto 10% -0.5rem auto; animation-delay: -4s" aria-hidden="true">▲</span>
|
|
34
|
+
<div class="oc-code-window">
|
|
35
|
+
<div class="oc-code-window__bar"><i></i><i></i><i></i><span v-if="codeTitle" class="oc-code-window__title">{{ codeTitle }}</span></div>
|
|
36
|
+
<pre class="oc-code-window__body">{{ code }}</pre>
|
|
37
|
+
</div>
|
|
38
|
+
</slot>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
</section>
|
|
42
|
+
</template>
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<!-- File: packages/vue/src/blocks/OcBlockHeroOrbit.vue | Map: props + default marks -> copy -> visual (ring with marks + center slot / code window) -->
|
|
2
|
+
<script setup lang="ts">
|
|
3
|
+
/**
|
|
4
|
+
* Hero with a code window and product marks that orbit around it (reduced motion: they stand still).
|
|
5
|
+
* `title` + `highlight` + `titleEnd`, or the `title` slot. Slots: lead, actions, center (replaces the code window;
|
|
6
|
+
* give it class="oc-block-orbit-center"). Classes: .oc-block-orbit-visual, -ring, -mark (--oc-orbit-angle), -center
|
|
7
|
+
*/
|
|
8
|
+
import { computed } from 'vue'
|
|
9
|
+
|
|
10
|
+
export interface HeroOrbitMark {
|
|
11
|
+
glyph: string
|
|
12
|
+
accent: string
|
|
13
|
+
}
|
|
14
|
+
const props = withDefaults(
|
|
15
|
+
defineProps<{
|
|
16
|
+
eyebrow?: string
|
|
17
|
+
title?: string
|
|
18
|
+
highlight?: string
|
|
19
|
+
titleEnd?: string
|
|
20
|
+
lead?: string
|
|
21
|
+
code?: string
|
|
22
|
+
codeTitle?: string
|
|
23
|
+
marks?: HeroOrbitMark[]
|
|
24
|
+
duration?: string
|
|
25
|
+
}>(),
|
|
26
|
+
{
|
|
27
|
+
code: '',
|
|
28
|
+
marks: () => [
|
|
29
|
+
{ glyph: '◆', accent: 'green' },
|
|
30
|
+
{ glyph: '◉', accent: 'violet' },
|
|
31
|
+
{ glyph: '▲', accent: 'orange' },
|
|
32
|
+
{ glyph: '★', accent: 'cyan' },
|
|
33
|
+
{ glyph: '♥', accent: 'red' },
|
|
34
|
+
{ glyph: '☀', accent: 'yellow' },
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
)
|
|
38
|
+
// Spread the marks evenly over the ring.
|
|
39
|
+
const angle = (i: number) => `--oc-orbit-angle: ${(360 / props.marks.length) * i}deg`
|
|
40
|
+
const visualStyle = computed(() => (props.duration ? `--oc-orbit-duration: ${props.duration}` : undefined))
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<template>
|
|
44
|
+
<section class="oc-block-orbit oc-section-pad">
|
|
45
|
+
<div class="oc-container oc-split">
|
|
46
|
+
<div>
|
|
47
|
+
<p v-if="eyebrow" class="oc-eyebrow">{{ eyebrow }}</p>
|
|
48
|
+
<h1 class="oc-display">
|
|
49
|
+
<slot name="title">{{ title }} <span v-if="highlight" class="oc-text-gradient">{{ highlight }}</span>{{ titleEnd }}</slot>
|
|
50
|
+
</h1>
|
|
51
|
+
<p v-if="lead || $slots.lead" class="oc-lead"><slot name="lead">{{ lead }}</slot></p>
|
|
52
|
+
<div v-if="$slots.actions" class="flex flex-wrap gap-1 mt-2"><slot name="actions" /></div>
|
|
53
|
+
</div>
|
|
54
|
+
<div class="oc-block-orbit-visual" :style="visualStyle">
|
|
55
|
+
<div class="oc-block-orbit-ring" aria-hidden="true">
|
|
56
|
+
<span v-for="(mark, i) in marks" :key="i" class="oc-block-orbit-mark" :style="angle(i)">
|
|
57
|
+
<span :class="['oc-product-mark oc-product-mark--sm', `oc-accent--${mark.accent}`]">{{ mark.glyph }}</span>
|
|
58
|
+
</span>
|
|
59
|
+
</div>
|
|
60
|
+
<slot name="center">
|
|
61
|
+
<div class="oc-code-window oc-block-orbit-center">
|
|
62
|
+
<div class="oc-code-window__bar"><i></i><i></i><i></i><span v-if="codeTitle" class="oc-code-window__title">{{ codeTitle }}</span></div>
|
|
63
|
+
<pre class="oc-code-window__body">{{ code }}</pre>
|
|
64
|
+
</div>
|
|
65
|
+
</slot>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
</section>
|
|
69
|
+
</template>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/** Hero with text left and visual right. Slots: actions, visual. Classes: .oc-block-hero-split, -actions, -visual */
|
|
3
|
+
defineProps<{ title?: string; text?: string }>()
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<template>
|
|
7
|
+
<div class="oc-block-hero-split">
|
|
8
|
+
<div>
|
|
9
|
+
<h1 v-if="title">{{ title }}</h1>
|
|
10
|
+
<p v-if="text">{{ text }}</p>
|
|
11
|
+
<div v-if="$slots.actions" class="oc-block-hero-actions justify-start"><slot name="actions" /></div>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="oc-block-hero-visual"><slot name="visual" /></div>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Page header with icon tile, title, intro, meta badges and an action row.
|
|
4
|
+
* Slots: icon, meta (badges), actions. Classes: .oc-block-modulehead, -band, -icon, -body, -title, -intro, -meta, -actions
|
|
5
|
+
*/
|
|
6
|
+
defineProps<{ title: string; intro?: string }>()
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<template>
|
|
10
|
+
<header class="oc-block-modulehead">
|
|
11
|
+
<div class="oc-block-modulehead-band">
|
|
12
|
+
<span v-if="$slots.icon" class="oc-block-modulehead-icon" aria-hidden="true"><slot name="icon" /></span>
|
|
13
|
+
<div class="oc-block-modulehead-body">
|
|
14
|
+
<h1 class="oc-block-modulehead-title">{{ title }}</h1>
|
|
15
|
+
<p v-if="intro" class="oc-block-modulehead-intro">{{ intro }}</p>
|
|
16
|
+
<div v-if="$slots.meta" class="oc-block-modulehead-meta"><slot name="meta" /></div>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
<div v-if="$slots.actions" class="oc-block-modulehead-actions"><slot name="actions" /></div>
|
|
20
|
+
</header>
|
|
21
|
+
</template>
|