diff --git a/.claude/rules/paper-components.md b/.claude/rules/paper-components.md new file mode 100644 index 000000000..d916312d0 --- /dev/null +++ b/.claude/rules/paper-components.md @@ -0,0 +1,280 @@ +--- +paths: packages/emerald/** +--- + +# Paper Design System Components + +Rules for building components in Paper design systems (Emerald, Onyx, etc.). + +## Architecture + +``` +Emerald / Onyx / etc. (styled design system — scoped to its own spec) + ↓ +Paper (styling primitives — V0Paper, composables output utility classes) + ↓ +v0 (headless logic & accessibility — zero styling) +``` + +Each design system is a **complete framework for a single design language**, not a theme. It only ships styles and functionality defined in its own spec. No universal framework sprawl. + +## Contract + +### Must + +- **Root components use `V0Paper`** as their base element — unless the component doesn't need Paper's styling surface (e.g., layout primitives like EmDivider), in which case `Atom` directly is fine. Exception: renderless v0 roots (like DialogRoot) don't get V0Paper — it goes on the first visible element instead (e.g., EmDialogContent). +- **Sub-components use `V0Paper` selectively** — only when the design spec requires independent styling control (own color, spacing, elevation). Otherwise, use raw v0 primitives or plain elements styled via parent's CSS scope. +- **Only wrap v0 sub-components the DS customizes.** Unwrapped v0 sub-components are imported directly by the consumer. Adding a wrapper later is additive, not breaking. +- **Props → utility classes → CSS.** Props are the developer-facing API; Paper's composables resolve them to utility classes. V0Paper applies these via `:class`. +- **Don't mix prop and class for the same concern.** `border="md"` and `class="rounded-md"` is fine (different concerns). `border="md"` and `class="border-lg"` is not. +- **Data attribute classes for state-driven styling.** Use `data-[disabled]:`, `data-[state=x]:` etc. as the primary approach for styling component states. Scoped slot variables remain available for logic, not styling. +- **Each component ships its own prop defaults.** No global token layer at the DS level. Variations are supported on a design-by-design basis. +- **Named slots become components.** Only the default slot exists. If something would be a named slot, it becomes a sub-component. +- **Explicitly re-expose v-model and events.** DS components declare their own `defineModel` / `defineEmits` and wire them to the underlying v0 primitive. No transparent `$attrs` forwarding — the DS controls its API surface. +- **Forward v0 slot props via default slot.** When wrapping a v0 compound component, pass slot props through: ``. + +### May + +- Create DS-specific sub-components not in v0 (e.g., `EmButtonLoader`, `EmButtonPrepend`) when the design spec calls for it +- Add wrapper sub-components for v0 primitives later — this is additive and non-breaking +- Paper may grow shared composed components (e.g., a preconfigured Popover-based menu) when a pattern proves universal across DSes — rare and organic, not planned upfront + +### Must Not + +- **Add logic that v0 doesn't provide.** If the DS needs new behavior, that belongs in v0. +- **Require a plugin install to function.** DS components work standalone. +- **Cover design patterns outside the DS's own spec.** Emerald ships what Emerald's spec defines. Nothing more. + +## Component Patterns + +### Pattern 1: Root with V0Paper (EmButton) + +For components that render a visible root element. V0Paper provides the styling surface, DS-specific props are destructured out, rest spread to V0Paper. + +```vue + + + + + +``` + +### Pattern 2: Wrapping v0 compound component (EmTextField) + +For components that wrap a v0 compound component. V0Paper wraps the v0 root, DS component re-exposes v-model and key props. + +```vue + + + + + +``` + +### Pattern 3: Renderless v0 root (EmDialog) + +For v0 components whose root is renderless (renders no element). No V0Paper on the root — it goes on the first visible sub-component (EmDialogContent). + +```vue + + + + + + +``` + +```vue + + + + + + +``` + +### Pattern 4: Simple sub-components + +DS-specific sub-components that are purely layout. No V0Paper, no props, just a styled element. + +```vue + + + + + +``` + +### Pattern 5: Sub-component wrapping v0 primitive + +Thin wrapper that adds an Emerald class to a v0 sub-component. Re-exposes slot props. + +```vue + + + + + +``` + +## Styling + +- Paper composables output utility class arrays (not inline CSS variables) +- V0Paper collects classes from all composables and applies via `:class` +- Scoped ` diff --git a/dev/src/components.d.ts b/dev/src/components.d.ts index 5b3969f93..a456532e4 100644 --- a/dev/src/components.d.ts +++ b/dev/src/components.d.ts @@ -70,6 +70,165 @@ declare module 'vue' { DialogDescription: typeof import('./../../packages/0/src/components/Dialog/DialogDescription.vue')['default'] DialogRoot: typeof import('./../../packages/0/src/components/Dialog/DialogRoot.vue')['default'] DialogTitle: typeof import('./../../packages/0/src/components/Dialog/DialogTitle.vue')['default'] + EmAccordion: typeof import('./../../packages/emerald/src/components/EmAccordion/EmAccordion.vue')['default'] + EmAccordionContent: typeof import('./../../packages/emerald/src/components/EmAccordion/EmAccordionContent.vue')['default'] + EmAccordionCue: typeof import('./../../packages/emerald/src/components/EmAccordion/EmAccordionCue.vue')['default'] + EmAccordionHeader: typeof import('./../../packages/emerald/src/components/EmAccordion/EmAccordionHeader.vue')['default'] + EmAccordionItem: typeof import('./../../packages/emerald/src/components/EmAccordion/EmAccordionItem.vue')['default'] + EmAccordionTrigger: typeof import('./../../packages/emerald/src/components/EmAccordion/EmAccordionTrigger.vue')['default'] + EmAlert: typeof import('./../../packages/emerald/src/components/EmAlert/EmAlert.vue')['default'] + EmAlertBody: typeof import('./../../packages/emerald/src/components/EmAlert/EmAlertBody.vue')['default'] + EmAlertClose: typeof import('./../../packages/emerald/src/components/EmAlert/EmAlertClose.vue')['default'] + EmAlertDescription: typeof import('./../../packages/emerald/src/components/EmAlert/EmAlertDescription.vue')['default'] + EmAlertIcon: typeof import('./../../packages/emerald/src/components/EmAlert/EmAlertIcon.vue')['default'] + EmAlertTitle: typeof import('./../../packages/emerald/src/components/EmAlert/EmAlertTitle.vue')['default'] + EmAutoComplete: typeof import('./../../packages/emerald/src/components/EmAutoComplete/EmAutoComplete.vue')['default'] + EmAutoCompleteContent: typeof import('./../../packages/emerald/src/components/EmAutoComplete/EmAutoCompleteContent.vue')['default'] + EmAutoCompleteControl: typeof import('./../../packages/emerald/src/components/EmAutoComplete/EmAutoCompleteControl.vue')['default'] + EmAutoCompleteEmpty: typeof import('./../../packages/emerald/src/components/EmAutoComplete/EmAutoCompleteEmpty.vue')['default'] + EmAutoCompleteInput: typeof import('./../../packages/emerald/src/components/EmAutoComplete/EmAutoCompleteInput.vue')['default'] + EmAutoCompleteItem: typeof import('./../../packages/emerald/src/components/EmAutoComplete/EmAutoCompleteItem.vue')['default'] + EmAvatar: typeof import('./../../packages/emerald/src/components/EmAvatar/EmAvatar.vue')['default'] + EmAvatarFallback: typeof import('./../../packages/emerald/src/components/EmAvatar/EmAvatarFallback.vue')['default'] + EmAvatarImage: typeof import('./../../packages/emerald/src/components/EmAvatar/EmAvatarImage.vue')['default'] + EmBadge: typeof import('./../../packages/emerald/src/components/EmBadge/EmBadge.vue')['default'] + EmBreadcrumb: typeof import('./../../packages/emerald/src/components/EmBreadcrumb/EmBreadcrumb.vue')['default'] + EmBreadcrumbDivider: typeof import('./../../packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbDivider.vue')['default'] + EmBreadcrumbEllipsis: typeof import('./../../packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbEllipsis.vue')['default'] + EmBreadcrumbItem: typeof import('./../../packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbItem.vue')['default'] + EmBreadcrumbLink: typeof import('./../../packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbLink.vue')['default'] + EmBreadcrumbList: typeof import('./../../packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbList.vue')['default'] + EmBreadcrumbPage: typeof import('./../../packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbPage.vue')['default'] + EmButton: typeof import('./../../packages/emerald/src/components/EmButton/EmButton.vue')['default'] + EmButtonAppend: typeof import('./../../packages/emerald/src/components/EmButton/EmButtonAppend.vue')['default'] + EmButtonContent: typeof import('./../../packages/emerald/src/components/EmButton/EmButtonContent.vue')['default'] + EmButtonLoader: typeof import('./../../packages/emerald/src/components/EmButton/EmButtonLoader.vue')['default'] + EmButtonPrepend: typeof import('./../../packages/emerald/src/components/EmButton/EmButtonPrepend.vue')['default'] + EmCard: typeof import('./../../packages/emerald/src/components/EmCard/EmCard.vue')['default'] + EmCardBody: typeof import('./../../packages/emerald/src/components/EmCard/EmCardBody.vue')['default'] + EmCardFooter: typeof import('./../../packages/emerald/src/components/EmCard/EmCardFooter.vue')['default'] + EmCardHeader: typeof import('./../../packages/emerald/src/components/EmCard/EmCardHeader.vue')['default'] + EmCardSubtitle: typeof import('./../../packages/emerald/src/components/EmCard/EmCardSubtitle.vue')['default'] + EmCardTitle: typeof import('./../../packages/emerald/src/components/EmCard/EmCardTitle.vue')['default'] + EmCarousel: typeof import('./../../packages/emerald/src/components/EmCarousel/EmCarousel.vue')['default'] + EmCarouselIndicator: typeof import('./../../packages/emerald/src/components/EmCarousel/EmCarouselIndicator.vue')['default'] + EmCarouselItem: typeof import('./../../packages/emerald/src/components/EmCarousel/EmCarouselItem.vue')['default'] + EmCarouselNext: typeof import('./../../packages/emerald/src/components/EmCarousel/EmCarouselNext.vue')['default'] + EmCarouselPrevious: typeof import('./../../packages/emerald/src/components/EmCarousel/EmCarouselPrevious.vue')['default'] + EmCarouselViewport: typeof import('./../../packages/emerald/src/components/EmCarousel/EmCarouselViewport.vue')['default'] + EmCheckbox: typeof import('./../../packages/emerald/src/components/EmCheckbox/EmCheckbox.vue')['default'] + EmCheckboxGroup: typeof import('./../../packages/emerald/src/components/EmCheckbox/EmCheckboxGroup.vue')['default'] + EmCheckboxIndicator: typeof import('./../../packages/emerald/src/components/EmCheckbox/EmCheckboxIndicator.vue')['default'] + EmCheckboxSelectAll: typeof import('./../../packages/emerald/src/components/EmCheckbox/EmCheckboxSelectAll.vue')['default'] + EmContainer: typeof import('./../../packages/emerald/src/components/EmContainer/EmContainer.vue')['default'] + EmDatePicker: typeof import('./../../packages/emerald/src/components/EmDatePicker/EmDatePicker.vue')['default'] + EmDatePickerCalendar: typeof import('./../../packages/emerald/src/components/EmDatePicker/EmDatePickerCalendar.vue')['default'] + EmDatePickerCell: typeof import('./../../packages/emerald/src/components/EmDatePicker/EmDatePickerCell.vue')['default'] + EmDatePickerGrid: typeof import('./../../packages/emerald/src/components/EmDatePicker/EmDatePickerGrid.vue')['default'] + EmDatePickerHeader: typeof import('./../../packages/emerald/src/components/EmDatePicker/EmDatePickerHeader.vue')['default'] + EmDatePickerInput: typeof import('./../../packages/emerald/src/components/EmDatePicker/EmDatePickerInput.vue')['default'] + EmDialog: typeof import('./../../packages/emerald/src/components/EmDialog/EmDialog.vue')['default'] + EmDialogActivator: typeof import('./../../packages/emerald/src/components/EmDialog/EmDialogActivator.vue')['default'] + EmDialogBody: typeof import('./../../packages/emerald/src/components/EmDialog/EmDialogBody.vue')['default'] + EmDialogClose: typeof import('./../../packages/emerald/src/components/EmDialog/EmDialogClose.vue')['default'] + EmDialogContent: typeof import('./../../packages/emerald/src/components/EmDialog/EmDialogContent.vue')['default'] + EmDialogDescription: typeof import('./../../packages/emerald/src/components/EmDialog/EmDialogDescription.vue')['default'] + EmDialogFooter: typeof import('./../../packages/emerald/src/components/EmDialog/EmDialogFooter.vue')['default'] + EmDialogHeader: typeof import('./../../packages/emerald/src/components/EmDialog/EmDialogHeader.vue')['default'] + EmDialogTitle: typeof import('./../../packages/emerald/src/components/EmDialog/EmDialogTitle.vue')['default'] + EmDivider: typeof import('./../../packages/emerald/src/components/EmDivider/EmDivider.vue')['default'] + EmDividerLabel: typeof import('./../../packages/emerald/src/components/EmDivider/EmDividerLabel.vue')['default'] + EmDividerLine: typeof import('./../../packages/emerald/src/components/EmDivider/EmDividerLine.vue')['default'] + EmFlex: typeof import('./../../packages/emerald/src/components/EmFlex/EmFlex.vue')['default'] + EmForm: typeof import('./../../packages/emerald/src/components/EmForm/EmForm.vue')['default'] + EmGrid: typeof import('./../../packages/emerald/src/components/EmGrid/EmGrid.vue')['default'] + EmGridItem: typeof import('./../../packages/emerald/src/components/EmGrid/EmGridItem.vue')['default'] + EmList: typeof import('./../../packages/emerald/src/components/EmList/EmList.vue')['default'] + EmListItem: typeof import('./../../packages/emerald/src/components/EmList/EmListItem.vue')['default'] + EmListItemAction: typeof import('./../../packages/emerald/src/components/EmList/EmListItemAction.vue')['default'] + EmListItemBody: typeof import('./../../packages/emerald/src/components/EmList/EmListItemBody.vue')['default'] + EmListItemIcon: typeof import('./../../packages/emerald/src/components/EmList/EmListItemIcon.vue')['default'] + EmListItemSubtitle: typeof import('./../../packages/emerald/src/components/EmList/EmListItemSubtitle.vue')['default'] + EmListItemTitle: typeof import('./../../packages/emerald/src/components/EmList/EmListItemTitle.vue')['default'] + EmListSeparator: typeof import('./../../packages/emerald/src/components/EmList/EmListSeparator.vue')['default'] + EmListSubheader: typeof import('./../../packages/emerald/src/components/EmList/EmListSubheader.vue')['default'] + EmLoading: typeof import('./../../packages/emerald/src/components/EmLoading/EmLoading.vue')['default'] + EmMenu: typeof import('./../../packages/emerald/src/components/EmMenu/EmMenu.vue')['default'] + EmMenuActivator: typeof import('./../../packages/emerald/src/components/EmMenu/EmMenuActivator.vue')['default'] + EmMenuContent: typeof import('./../../packages/emerald/src/components/EmMenu/EmMenuContent.vue')['default'] + EmMenuItem: typeof import('./../../packages/emerald/src/components/EmMenu/EmMenuItem.vue')['default'] + EmMenuLabel: typeof import('./../../packages/emerald/src/components/EmMenu/EmMenuLabel.vue')['default'] + EmMenuSeparator: typeof import('./../../packages/emerald/src/components/EmMenu/EmMenuSeparator.vue')['default'] + EmPagination: typeof import('./../../packages/emerald/src/components/EmPagination/EmPagination.vue')['default'] + EmPaginationEllipsis: typeof import('./../../packages/emerald/src/components/EmPagination/EmPaginationEllipsis.vue')['default'] + EmPaginationFirst: typeof import('./../../packages/emerald/src/components/EmPagination/EmPaginationFirst.vue')['default'] + EmPaginationItem: typeof import('./../../packages/emerald/src/components/EmPagination/EmPaginationItem.vue')['default'] + EmPaginationLast: typeof import('./../../packages/emerald/src/components/EmPagination/EmPaginationLast.vue')['default'] + EmPaginationNext: typeof import('./../../packages/emerald/src/components/EmPagination/EmPaginationNext.vue')['default'] + EmPaginationPrev: typeof import('./../../packages/emerald/src/components/EmPagination/EmPaginationPrev.vue')['default'] + EmProgress: typeof import('./../../packages/emerald/src/components/EmProgress/EmProgress.vue')['default'] + EmProgressFill: typeof import('./../../packages/emerald/src/components/EmProgress/EmProgressFill.vue')['default'] + EmProgressTrack: typeof import('./../../packages/emerald/src/components/EmProgress/EmProgressTrack.vue')['default'] + EmProgressValue: typeof import('./../../packages/emerald/src/components/EmProgress/EmProgressValue.vue')['default'] + EmRadio: typeof import('./../../packages/emerald/src/components/EmRadio/EmRadio.vue')['default'] + EmRadioGroup: typeof import('./../../packages/emerald/src/components/EmRadio/EmRadioGroup.vue')['default'] + EmRadioIndicator: typeof import('./../../packages/emerald/src/components/EmRadio/EmRadioIndicator.vue')['default'] + EmSelect: typeof import('./../../packages/emerald/src/components/EmSelect/EmSelect.vue')['default'] + EmSelectActivator: typeof import('./../../packages/emerald/src/components/EmSelect/EmSelectActivator.vue')['default'] + EmSelectContent: typeof import('./../../packages/emerald/src/components/EmSelect/EmSelectContent.vue')['default'] + EmSelectItem: typeof import('./../../packages/emerald/src/components/EmSelect/EmSelectItem.vue')['default'] + EmSelectPlaceholder: typeof import('./../../packages/emerald/src/components/EmSelect/EmSelectPlaceholder.vue')['default'] + EmSelectValue: typeof import('./../../packages/emerald/src/components/EmSelect/EmSelectValue.vue')['default'] + EmSlider: typeof import('./../../packages/emerald/src/components/EmSlider/EmSlider.vue')['default'] + EmSliderRange: typeof import('./../../packages/emerald/src/components/EmSlider/EmSliderRange.vue')['default'] + EmSliderThumb: typeof import('./../../packages/emerald/src/components/EmSlider/EmSliderThumb.vue')['default'] + EmSliderTrack: typeof import('./../../packages/emerald/src/components/EmSlider/EmSliderTrack.vue')['default'] + EmStepper: typeof import('./../../packages/emerald/src/components/EmStepper/EmStepper.vue')['default'] + EmStepperItem: typeof import('./../../packages/emerald/src/components/EmStepper/EmStepperItem.vue')['default'] + EmStepperLabel: typeof import('./../../packages/emerald/src/components/EmStepper/EmStepperLabel.vue')['default'] + EmStepperLabelDescription: typeof import('./../../packages/emerald/src/components/EmStepper/EmStepperLabelDescription.vue')['default'] + EmStepperSeparator: typeof import('./../../packages/emerald/src/components/EmStepper/EmStepperSeparator.vue')['default'] + EmSwitch: typeof import('./../../packages/emerald/src/components/EmSwitch/EmSwitch.vue')['default'] + EmSwitchGroup: typeof import('./../../packages/emerald/src/components/EmSwitch/EmSwitchGroup.vue')['default'] + EmSwitchThumb: typeof import('./../../packages/emerald/src/components/EmSwitch/EmSwitchThumb.vue')['default'] + EmSwitchTrack: typeof import('./../../packages/emerald/src/components/EmSwitch/EmSwitchTrack.vue')['default'] + EmTable: typeof import('./../../packages/emerald/src/components/EmTable/EmTable.vue')['default'] + EmTableBody: typeof import('./../../packages/emerald/src/components/EmTable/EmTableBody.vue')['default'] + EmTableCell: typeof import('./../../packages/emerald/src/components/EmTable/EmTableCell.vue')['default'] + EmTableHead: typeof import('./../../packages/emerald/src/components/EmTable/EmTableHead.vue')['default'] + EmTableHeader: typeof import('./../../packages/emerald/src/components/EmTable/EmTableHeader.vue')['default'] + EmTableRow: typeof import('./../../packages/emerald/src/components/EmTable/EmTableRow.vue')['default'] + EmTabs: typeof import('./../../packages/emerald/src/components/EmTabs/EmTabs.vue')['default'] + EmTabsItem: typeof import('./../../packages/emerald/src/components/EmTabs/EmTabsItem.vue')['default'] + EmTabsList: typeof import('./../../packages/emerald/src/components/EmTabs/EmTabsList.vue')['default'] + EmTabsPanel: typeof import('./../../packages/emerald/src/components/EmTabs/EmTabsPanel.vue')['default'] + EmTag: typeof import('./../../packages/emerald/src/components/EmTag/EmTag.vue')['default'] + EmTextarea: typeof import('./../../packages/emerald/src/components/EmTextarea/EmTextarea.vue')['default'] + EmTextareaControl: typeof import('./../../packages/emerald/src/components/EmTextarea/EmTextareaControl.vue')['default'] + EmTextareaDescription: typeof import('./../../packages/emerald/src/components/EmTextarea/EmTextareaDescription.vue')['default'] + EmTextareaError: typeof import('./../../packages/emerald/src/components/EmTextarea/EmTextareaError.vue')['default'] + EmTextareaLabel: typeof import('./../../packages/emerald/src/components/EmTextarea/EmTextareaLabel.vue')['default'] + EmTextField: typeof import('./../../packages/emerald/src/components/EmTextField/EmTextField.vue')['default'] + EmTextFieldAppend: typeof import('./../../packages/emerald/src/components/EmTextField/EmTextFieldAppend.vue')['default'] + EmTextFieldControl: typeof import('./../../packages/emerald/src/components/EmTextField/EmTextFieldControl.vue')['default'] + EmTextFieldDescription: typeof import('./../../packages/emerald/src/components/EmTextField/EmTextFieldDescription.vue')['default'] + EmTextFieldError: typeof import('./../../packages/emerald/src/components/EmTextField/EmTextFieldError.vue')['default'] + EmTextFieldLabel: typeof import('./../../packages/emerald/src/components/EmTextField/EmTextFieldLabel.vue')['default'] + EmTextFieldPrepend: typeof import('./../../packages/emerald/src/components/EmTextField/EmTextFieldPrepend.vue')['default'] + EmToast: typeof import('./../../packages/emerald/src/components/EmToast/EmToast.vue')['default'] + EmToastBody: typeof import('./../../packages/emerald/src/components/EmToast/EmToastBody.vue')['default'] + EmToastClose: typeof import('./../../packages/emerald/src/components/EmToast/EmToastClose.vue')['default'] + EmToastDescription: typeof import('./../../packages/emerald/src/components/EmToast/EmToastDescription.vue')['default'] + EmToastIcon: typeof import('./../../packages/emerald/src/components/EmToast/EmToastIcon.vue')['default'] + EmToastTitle: typeof import('./../../packages/emerald/src/components/EmToast/EmToastTitle.vue')['default'] + EmTooltip: typeof import('./../../packages/emerald/src/components/EmTooltip/EmTooltip.vue')['default'] + EmTooltipActivator: typeof import('./../../packages/emerald/src/components/EmTooltip/EmTooltipActivator.vue')['default'] + EmTooltipContent: typeof import('./../../packages/emerald/src/components/EmTooltip/EmTooltipContent.vue')['default'] + EmUpload: typeof import('./../../packages/emerald/src/components/EmUpload/EmUpload.vue')['default'] + EmUploadDropzone: typeof import('./../../packages/emerald/src/components/EmUpload/EmUploadDropzone.vue')['default'] + EmUploadInput: typeof import('./../../packages/emerald/src/components/EmUpload/EmUploadInput.vue')['default'] + EmUploadItem: typeof import('./../../packages/emerald/src/components/EmUpload/EmUploadItem.vue')['default'] + EmUploadList: typeof import('./../../packages/emerald/src/components/EmUpload/EmUploadList.vue')['default'] ExpansionPanelActivator: typeof import('./../../packages/0/src/components/ExpansionPanel/ExpansionPanelActivator.vue')['default'] ExpansionPanelContent: typeof import('./../../packages/0/src/components/ExpansionPanel/ExpansionPanelContent.vue')['default'] ExpansionPanelCue: typeof import('./../../packages/0/src/components/ExpansionPanel/ExpansionPanelCue.vue')['default'] @@ -95,6 +254,9 @@ declare module 'vue' { NumberFieldIncrement: typeof import('./../../packages/0/src/components/NumberField/NumberFieldIncrement.vue')['default'] NumberFieldRoot: typeof import('./../../packages/0/src/components/NumberField/NumberFieldRoot.vue')['default'] NumberFieldScrub: typeof import('./../../packages/0/src/components/NumberField/NumberFieldScrub.vue')['default'] + OverflowIndicator: typeof import('./../../packages/0/src/components/Overflow/OverflowIndicator.vue')['default'] + OverflowItem: typeof import('./../../packages/0/src/components/Overflow/OverflowItem.vue')['default'] + OverflowRoot: typeof import('./../../packages/0/src/components/Overflow/OverflowRoot.vue')['default'] PaginationEllipsis: typeof import('./../../packages/0/src/components/Pagination/PaginationEllipsis.vue')['default'] PaginationFirst: typeof import('./../../packages/0/src/components/Pagination/PaginationFirst.vue')['default'] PaginationItem: typeof import('./../../packages/0/src/components/Pagination/PaginationItem.vue')['default'] diff --git a/dev/src/composables.d.ts b/dev/src/composables.d.ts index 674e2484a..4650f26a9 100644 --- a/dev/src/composables.d.ts +++ b/dev/src/composables.d.ts @@ -8,20 +8,30 @@ export {} declare global { const COMMON_ELEMENTS: typeof import('../../packages/0/src/constants/htmlElements').COMMON_ELEMENTS const ClientAdapter: typeof import('../../packages/0/src/composables/createDataTable/index').ClientAdapter + const ClientComboboxAdapter: typeof import('../../packages/0/src/composables/createCombobox/index').ClientComboboxAdapter + const ClientDataTableAdapter: typeof import('../../packages/0/src/composables/createDataTable/index').ClientDataTableAdapter + const ComboboxAdapter: typeof import('../../packages/0/src/composables/createCombobox/index').ComboboxAdapter const ComboboxClientAdapter: typeof import('../../packages/0/src/composables/createCombobox/index').ComboboxClientAdapter const ComboboxServerAdapter: typeof import('../../packages/0/src/composables/createCombobox/index').ComboboxServerAdapter const ConsolaLoggerAdapter: typeof import('../../packages/0/src/composables/useLogger/index').ConsolaLoggerAdapter const DEFAULT_DARK: typeof import('../../packages/paper/src/composables/useTheme/index').DEFAULT_DARK const DEFAULT_LIGHT: typeof import('../../packages/paper/src/composables/useTheme/index').DEFAULT_LIGHT const DataTableAdapter: typeof import('../../packages/0/src/composables/createDataTable/index').DataTableAdapter + const DragDropAdapter: typeof import('../../packages/0/src/composables/useDragDrop/index').DragDropAdapter const EffectScope: typeof import('vue').EffectScope const FeaturesAdapter: typeof import('../../packages/0/src/composables/useFeatures/index').FeaturesAdapter const FlagsmithFeatureAdapter: typeof import('../../packages/0/src/composables/useFeatures/index').FlagsmithFeatureAdapter const IN_BROWSER: typeof import('../../packages/0/src/constants/globals').IN_BROWSER + const KeyboardAdapter: typeof import('../../packages/0/src/composables/useDragDrop/index').KeyboardAdapter const LaunchDarklyFeatureAdapter: typeof import('../../packages/0/src/composables/useFeatures/index').LaunchDarklyFeatureAdapter + const LocaleAdapter: typeof import('../../packages/0/src/composables/useLocale/index').LocaleAdapter + const LoggerAdapter: typeof import('../../packages/0/src/composables/useLogger/index').LoggerAdapter const MemoryAdapter: typeof import('../../packages/0/src/composables/useStorage/index').MemoryAdapter + const MemoryStorageAdapter: typeof import('../../packages/0/src/composables/useStorage/index').MemoryStorageAdapter const PermissionAdapter: typeof import('../../packages/0/src/composables/usePermissions/index').PermissionAdapter + const PermissionsAdapter: typeof import('../../packages/0/src/composables/usePermissions/index').PermissionsAdapter const PinoLoggerAdapter: typeof import('../../packages/0/src/composables/useLogger/index').PinoLoggerAdapter + const PointerAdapter: typeof import('../../packages/0/src/composables/useDragDrop/index').PointerAdapter const PostHogFeatureAdapter: typeof import('../../packages/0/src/composables/useFeatures/index').PostHogFeatureAdapter const SELF_CLOSING_TAGS: typeof import('../../packages/0/src/constants/htmlElements').SELF_CLOSING_TAGS const SUPPORTS_INTERSECTION_OBSERVER: typeof import('../../packages/0/src/constants/globals').SUPPORTS_INTERSECTION_OBSERVER @@ -30,11 +40,18 @@ declare global { const SUPPORTS_OBSERVER: typeof import('../../packages/0/src/constants/globals').SUPPORTS_OBSERVER const SUPPORTS_TOUCH: typeof import('../../packages/0/src/constants/globals').SUPPORTS_TOUCH const ServerAdapter: typeof import('../../packages/0/src/composables/createDataTable/index').ServerAdapter + const ServerComboboxAdapter: typeof import('../../packages/0/src/composables/createCombobox/index').ServerComboboxAdapter + const ServerDataTableAdapter: typeof import('../../packages/0/src/composables/createDataTable/index').ServerDataTableAdapter + const StorageAdapter: typeof import('../../packages/0/src/composables/useStorage/index').StorageAdapter const TemporalDateAdapter: typeof import('../../packages/0/src/composables/useDate/index').TemporalDateAdapter + const V0LocaleAdapter: typeof import('../../packages/0/src/composables/useLocale/index').V0LocaleAdapter + const V0LoggerAdapter: typeof import('../../packages/0/src/composables/useLogger/index').V0LoggerAdapter + const V0RtlAdapter: typeof import('../../packages/0/src/composables/useRtl/index').V0RtlAdapter const V0StyleSheetThemeAdapter: typeof import('../../packages/0/src/composables/useTheme/index').V0StyleSheetThemeAdapter const V0UnheadThemeAdapter: typeof import('../../packages/0/src/composables/useTheme/index').V0UnheadThemeAdapter const V0_ELEVATION_KEY: typeof import('../../packages/paper/src/composables/useElevation/index').V0_ELEVATION_KEY const VirtualAdapter: typeof import('../../packages/0/src/composables/createDataTable/index').VirtualAdapter + const VirtualDataTableAdapter: typeof import('../../packages/0/src/composables/createDataTable/index').VirtualDataTableAdapter const Vuetify0DateAdapter: typeof import('../../packages/0/src/composables/useDate/index').Vuetify0DateAdapter const Vuetify0LocaleAdapter: typeof import('../../packages/0/src/composables/useLocale/index').Vuetify0LocaleAdapter const Vuetify0LoggerAdapter: typeof import('../../packages/0/src/composables/useLogger/index').Vuetify0LoggerAdapter @@ -75,6 +92,7 @@ declare global { const createHydrationContext: typeof import('../../packages/0/src/composables/useHydration/index').createHydrationContext const createHydrationPlugin: typeof import('../../packages/0/src/composables/useHydration/index').createHydrationPlugin const createInput: typeof import('../../packages/0/src/composables/createInput/index').createInput + const createKanban: typeof import('../../packages/0/src/composables/createKanban/index').createKanban const createLocale: typeof import('../../packages/0/src/composables/useLocale/index').createLocale const createLocaleContext: typeof import('../../packages/0/src/composables/useLocale/index').createLocaleContext const createLocaleFallback: typeof import('../../packages/0/src/composables/useLocale/index').createLocaleFallback @@ -120,6 +138,7 @@ declare global { const createSingle: typeof import('../../packages/0/src/composables/createSingle/index').createSingle const createSingleContext: typeof import('../../packages/0/src/composables/createSingle/index').createSingleContext const createSlider: typeof import('../../packages/0/src/composables/createSlider/index').createSlider + const createSortable: typeof import('../../packages/0/src/composables/createSortable/index').createSortable const createStack: typeof import('../../packages/0/src/composables/useStack/index').createStack const createStackContext: typeof import('../../packages/0/src/composables/useStack/index').createStackContext const createStackPlugin: typeof import('../../packages/0/src/composables/useStack/index').createStackPlugin @@ -179,6 +198,7 @@ declare global { const isStandardSchema: typeof import('../../packages/0/src/composables/useRules/index').isStandardSchema const isString: typeof import('../../packages/0/src/utilities/helpers').isString const isSymbol: typeof import('../../packages/0/src/utilities/helpers').isSymbol + const isThenable: typeof import('../../packages/0/src/utilities/helpers').isThenable const isUndefined: typeof import('../../packages/0/src/utilities/helpers').isUndefined const markRaw: typeof import('vue').markRaw const mergeDeep: typeof import('../../packages/0/src/utilities/helpers').mergeDeep @@ -240,8 +260,10 @@ declare global { const useCssVars: typeof import('vue').useCssVars const useDataTable: typeof import('../../packages/0/src/composables/createDataTable/index').useDataTable const useDate: typeof import('../../packages/0/src/composables/useDate/index').useDate + const useDelay: typeof import('../../packages/0/src/composables/useDelay/index').useDelay const useDimensions: typeof import('../../packages/paper/src/composables/useDimensions/index').useDimensions const useDocumentEventListener: typeof import('../../packages/0/src/composables/useEventListener/index').useDocumentEventListener + const useDragDrop: typeof import('../../packages/0/src/composables/useDragDrop/index').useDragDrop const useElementIntersection: typeof import('../../packages/0/src/composables/useIntersectionObserver/index').useElementIntersection const useElementSize: typeof import('../../packages/0/src/composables/useResizeObserver/index').useElementSize const useElevation: typeof import('../../packages/paper/src/composables/useElevation/index').useElevation @@ -336,13 +358,13 @@ declare global { export type { BreadcrumbTicketInput, BreadcrumbTicket, BreadcrumbsContext, BreadcrumbsOptions, BreadcrumbsContextOptions } from '../../packages/0/src/composables/createBreadcrumbs/index' import('../../packages/0/src/composables/createBreadcrumbs/index') // @ts-ignore - export type { ComboboxOptions, ComboboxContext, ComboboxAdapterContext, ComboboxAdapterInterface, ComboboxAdapterResult, ComboboxClientAdapterOptions } from '../../packages/0/src/composables/createCombobox/index' + export type { ComboboxOptions, ComboboxContext, ClientComboboxAdapterOptions, ComboboxAdapterContext, ComboboxAdapterResult } from '../../packages/0/src/composables/createCombobox/index' import('../../packages/0/src/composables/createCombobox/index') // @ts-ignore export type { ContextKey, CreateContextOptions } from '../../packages/0/src/composables/createContext/index' import('../../packages/0/src/composables/createContext/index') // @ts-ignore - export type { KeysOfType, SelectStrategy, DataTableColumn, DataTableSort, DataTableSelection, DataTableGroup, DataTableGrouping, DataTableExpansion, DataTableOptions, DataTableContext, DataTableContextOptions, DataTableAdapterContext, DataTableAdapterInterface, DataTableAdapterResult, SortDirection, SortEntry, ServerAdapterOptions, ColumnNode, InternalHeader } from '../../packages/0/src/composables/createDataTable/index' + export type { KeysOfType, SelectStrategy, DataTableColumn, DataTableSort, DataTableSelection, DataTableGroup, DataTableGrouping, DataTableExpansion, DataTableOptions, DataTableContext, DataTableContextOptions, DataTableAdapterContext, DataTableAdapterResult, SortDirection, SortEntry, ServerDataTableAdapterOptions, ColumnNode, InternalHeader } from '../../packages/0/src/composables/createDataTable/index' import('../../packages/0/src/composables/createDataTable/index') // @ts-ignore export type { Primitive, FilterQuery, FilterItem, FilterMode, FilterFunction, FilterOptions, FilterResult, FilterContext, FilterContextOptions } from '../../packages/0/src/composables/createFilter/index' @@ -357,6 +379,9 @@ declare global { export type { InputState, InputOptions, InputContext } from '../../packages/0/src/composables/createInput/index' import('../../packages/0/src/composables/createInput/index') // @ts-ignore + export type { KanbanOptions, KanbanColumnTicketInput, KanbanColumnTicket, KanbanTransferPayload, KanbanEventListener, KanbanContext } from '../../packages/0/src/composables/createKanban/index' + import('../../packages/0/src/composables/createKanban/index') + // @ts-ignore export type { ModelTicketInput, ModelTicket, ModelContext, ModelOptions } from '../../packages/0/src/composables/createModel/index' import('../../packages/0/src/composables/createModel/index') // @ts-ignore @@ -396,6 +421,9 @@ declare global { export type { SliderTicketInput, SliderOptions, SliderContext } from '../../packages/0/src/composables/createSlider/index' import('../../packages/0/src/composables/createSlider/index') // @ts-ignore + export type { SortableTicketInput, SortableTicket, SortableOptions, SortableMovePayload, SortableEventListener, SortableContext } from '../../packages/0/src/composables/createSortable/index' + import('../../packages/0/src/composables/createSortable/index') + // @ts-ignore export type { StepTicketInput, StepTicket, StepContext, StepOptions, StepContextOptions } from '../../packages/0/src/composables/createStep/index' import('../../packages/0/src/composables/createStep/index') // @ts-ignore @@ -426,10 +454,16 @@ declare global { export type { DateContext, DateOptions, DateContextOptions, DatePluginOptions, DateAdapter } from '../../packages/0/src/composables/useDate/index' import('../../packages/0/src/composables/useDate/index') // @ts-ignore + export type { UseDelayOptions, UseDelayStartOptions, UseDelayReturn } from '../../packages/0/src/composables/useDelay/index' + import('../../packages/0/src/composables/useDelay/index') + // @ts-ignore + export type { Orientation, DragType, DropIndicator, DropPosition, DragVia, ActiveDrag, DraggableTicketInput, DraggableTicket, DropZoneTicketInput, DropZoneTicket, DragDropPlugin, DragDropOptions, DraggablesContext, ZonesContext, DragDropContext, DragDropAdapterContext, DragDropAdapterEmit, KeyboardAdapterOptions, PointerAdapterOptions } from '../../packages/0/src/composables/useDragDrop/index' + import('../../packages/0/src/composables/useDragDrop/index') + // @ts-ignore export type { CleanupFunction, EventHandler } from '../../packages/0/src/composables/useEventListener/index' import('../../packages/0/src/composables/useEventListener/index') // @ts-ignore - export type { FeatureTicketInput, FeatureTicket, FeatureContext, FeatureOptions, FeatureContextOptions, FeaturePluginOptions, FeaturesAdapterFlags, FeaturesAdapterInterface, FeaturesAdapterValue } from '../../packages/0/src/composables/useFeatures/index' + export type { FeatureTicketInput, FeatureTicket, FeatureContext, FeatureOptions, FeatureContextOptions, FeaturePluginOptions, FeaturesAdapterFlags, FeaturesAdapterValue } from '../../packages/0/src/composables/useFeatures/index' import('../../packages/0/src/composables/useFeatures/index') // @ts-ignore export type { UseHotkeyOptions, UseHotkeyReturn, PlatformContext } from '../../packages/0/src/composables/useHotkey/index' @@ -447,10 +481,10 @@ declare global { export type { LazyOptions, LazyContext } from '../../packages/0/src/composables/useLazy/index' import('../../packages/0/src/composables/useLazy/index') // @ts-ignore - export type { LocaleRecord, LocaleTicketInput, LocaleTicket, LocaleContext, LocaleOptions, LocaleContextOptions, LocalePluginOptions, LocaleAdapter, LocaleAdapterContext } from '../../packages/0/src/composables/useLocale/index' + export type { LocaleRecord, LocaleTicketInput, LocaleTicket, LocaleContext, LocaleOptions, LocaleContextOptions, LocalePluginOptions, LocaleAdapterContext } from '../../packages/0/src/composables/useLocale/index' import('../../packages/0/src/composables/useLocale/index') // @ts-ignore - export type { LoggerContext, LoggerOptions, LoggerContextOptions, LoggerPluginOptions, LoggerAdapter, LogLevel } from '../../packages/0/src/composables/useLogger/index' + export type { LoggerContext, LoggerOptions, LoggerContextOptions, LoggerPluginOptions, LogLevel } from '../../packages/0/src/composables/useLogger/index' import('../../packages/0/src/composables/useLogger/index') // @ts-ignore export type { MediaQueryContext } from '../../packages/0/src/composables/useMediaQuery/index' @@ -459,10 +493,10 @@ declare global { export type { ObservableNodeList, MutationObserverRecord, UseMutationObserverOptions, UseMutationObserverReturn } from '../../packages/0/src/composables/useMutationObserver/index' import('../../packages/0/src/composables/useMutationObserver/index') // @ts-ignore - export type { NotificationSeverity, NotificationInput, NotificationTicket, NotificationsAdapterContext, NotificationsAdapterInterface, NotificationsOptions, NotificationsContext, NotificationsPluginOptions } from '../../packages/0/src/composables/useNotifications/index' + export type { NotificationSeverity, NotificationInput, NotificationTicket, NotificationsAdapterContext, NotificationsOptions, NotificationsContext, NotificationsPluginOptions } from '../../packages/0/src/composables/useNotifications/index' import('../../packages/0/src/composables/useNotifications/index') // @ts-ignore - export type { PermissionTicket, PermissionContext, PermissionOptions, PermissionContextOptions, PermissionPluginOptions, PermissionAdapterInterface } from '../../packages/0/src/composables/usePermissions/index' + export type { PermissionTicket, PermissionContext, PermissionOptions, PermissionContextOptions, PermissionPluginOptions } from '../../packages/0/src/composables/usePermissions/index' import('../../packages/0/src/composables/usePermissions/index') // @ts-ignore export type { PopoverOptions, PopoverReturn } from '../../packages/0/src/composables/usePopover/index' @@ -495,7 +529,7 @@ declare global { export type { StackTicketInput, StackTicket, StackContext, StackOptions, StackContextOptions, StackPluginOptions } from '../../packages/0/src/composables/useStack/index' import('../../packages/0/src/composables/useStack/index') // @ts-ignore - export type { StorageContext, StorageOptions, StorageContextOptions, StoragePluginOptions, StorageAdapter, StorageType } from '../../packages/0/src/composables/useStorage/index' + export type { StorageContext, StorageOptions, StorageContextOptions, StoragePluginOptions, StorageType } from '../../packages/0/src/composables/useStorage/index' import('../../packages/0/src/composables/useStorage/index') // @ts-ignore export type { Colors, ThemeColors, ThemeRecord, ThemeTicketInput, ThemeTicket, ThemeContext, ThemeOptions, ThemeContextOptions, ThemePluginOptions, ThemeAdapter } from '../../packages/0/src/composables/useTheme/index' @@ -522,34 +556,40 @@ import { UnwrapRef } from 'vue' declare module 'vue' { interface GlobalComponents {} interface ComponentCustomProperties { - readonly COMMON_ELEMENTS: UnwrapRef - readonly ClientAdapter: UnwrapRef - readonly ComboboxClientAdapter: UnwrapRef - readonly ComboboxServerAdapter: UnwrapRef + readonly ClientComboboxAdapter: UnwrapRef + readonly ClientDataTableAdapter: UnwrapRef + readonly ComboboxAdapter: UnwrapRef readonly ConsolaLoggerAdapter: UnwrapRef readonly DEFAULT_DARK: UnwrapRef readonly DEFAULT_LIGHT: UnwrapRef readonly DataTableAdapter: UnwrapRef + readonly DragDropAdapter: UnwrapRef readonly EffectScope: UnwrapRef readonly FeaturesAdapter: UnwrapRef readonly IN_BROWSER: UnwrapRef - readonly MemoryAdapter: UnwrapRef - readonly PermissionAdapter: UnwrapRef + readonly KeyboardAdapter: UnwrapRef + readonly LocaleAdapter: UnwrapRef + readonly LoggerAdapter: UnwrapRef + readonly MemoryStorageAdapter: UnwrapRef + readonly PermissionsAdapter: UnwrapRef readonly PinoLoggerAdapter: UnwrapRef + readonly PointerAdapter: UnwrapRef readonly SELF_CLOSING_TAGS: UnwrapRef readonly SUPPORTS_INTERSECTION_OBSERVER: UnwrapRef readonly SUPPORTS_MATCH_MEDIA: UnwrapRef readonly SUPPORTS_MUTATION_OBSERVER: UnwrapRef readonly SUPPORTS_OBSERVER: UnwrapRef readonly SUPPORTS_TOUCH: UnwrapRef - readonly ServerAdapter: UnwrapRef + readonly ServerComboboxAdapter: UnwrapRef + readonly ServerDataTableAdapter: UnwrapRef + readonly StorageAdapter: UnwrapRef + readonly V0LocaleAdapter: UnwrapRef + readonly V0LoggerAdapter: UnwrapRef + readonly V0RtlAdapter: UnwrapRef readonly V0StyleSheetThemeAdapter: UnwrapRef readonly V0UnheadThemeAdapter: UnwrapRef readonly V0_ELEVATION_KEY: UnwrapRef - readonly VirtualAdapter: UnwrapRef - readonly Vuetify0LocaleAdapter: UnwrapRef - readonly Vuetify0LoggerAdapter: UnwrapRef - readonly Vuetify0RtlAdapter: UnwrapRef + readonly VirtualDataTableAdapter: UnwrapRef readonly __LOGGER_ENABLED__: UnwrapRef readonly apca: UnwrapRef readonly clamp: UnwrapRef @@ -584,6 +624,7 @@ declare module 'vue' { readonly createHydrationContext: UnwrapRef readonly createHydrationPlugin: UnwrapRef readonly createInput: UnwrapRef + readonly createKanban: UnwrapRef readonly createLocale: UnwrapRef readonly createLocaleContext: UnwrapRef readonly createLocaleFallback: UnwrapRef @@ -629,6 +670,7 @@ declare module 'vue' { readonly createSingle: UnwrapRef readonly createSingleContext: UnwrapRef readonly createSlider: UnwrapRef + readonly createSortable: UnwrapRef readonly createStack: UnwrapRef readonly createStackContext: UnwrapRef readonly createStackPlugin: UnwrapRef @@ -686,6 +728,7 @@ declare module 'vue' { readonly isStandardSchema: UnwrapRef readonly isString: UnwrapRef readonly isSymbol: UnwrapRef + readonly isThenable: UnwrapRef readonly isUndefined: UnwrapRef readonly markRaw: UnwrapRef readonly mergeDeep: UnwrapRef @@ -745,8 +788,10 @@ declare module 'vue' { readonly useCssVars: UnwrapRef readonly useDataTable: UnwrapRef readonly useDate: UnwrapRef + readonly useDelay: UnwrapRef readonly useDimensions: UnwrapRef readonly useDocumentEventListener: UnwrapRef + readonly useDragDrop: UnwrapRef readonly useElementIntersection: UnwrapRef readonly useElementSize: UnwrapRef readonly useElevation: UnwrapRef diff --git a/dev/src/main.ts b/dev/src/main.ts index bc8c39904..6bba0631c 100644 --- a/dev/src/main.ts +++ b/dev/src/main.ts @@ -2,6 +2,7 @@ import { ViteSSG } from 'vite-ssg' // Context import App from './App.vue' +import EmeraldKitchenSink from './EmeraldKitchenSink.vue' import Playground from './Playground.vue' import 'virtual:uno.css' @@ -10,7 +11,12 @@ import { registerPlugins } from './plugins' export const createApp = ViteSSG( App, - { routes: [{ path: '/', component: Playground }] }, + { + routes: [ + { path: '/', component: Playground }, + { path: '/emerald', component: EmeraldKitchenSink }, + ], + }, async ({ app }) => { registerPlugins(app) }) diff --git a/dev/vite.config.ts b/dev/vite.config.ts index 59284951e..742abb4a5 100644 --- a/dev/vite.config.ts +++ b/dev/vite.config.ts @@ -16,6 +16,7 @@ export default defineConfig({ UnocssVitePlugin(), Components({ dirs: [ + '../packages/emerald/src/components/', '../packages/paper/src/components/', '../packages/0/src/components/', ], @@ -53,6 +54,7 @@ export default defineConfig({ '@': fileURLToPath(new URL('src', import.meta.url)), '@vuetify/v0': fileURLToPath(new URL('../packages/0/src', import.meta.url)), '@vuetify/paper': fileURLToPath(new URL('../packages/paper/src', import.meta.url)), + '@paper/emerald': fileURLToPath(new URL('../packages/emerald/src', import.meta.url)), // internal '#v0': fileURLToPath(new URL('../packages/0/src', import.meta.url)), '#paper': fileURLToPath(new URL('../packages/paper/src', import.meta.url)), diff --git a/knip.json b/knip.json index 12991419f..42249c3c1 100644 --- a/knip.json +++ b/knip.json @@ -83,6 +83,13 @@ "sass" ] }, + "packages/emerald": { + "project": [ + "src/**/*.{ts,vue}", + "!src/**/*.test.ts", + "!src/**/*.spec.ts" + ] + }, "apps/playground": { "entry": [ "src/App.vue", diff --git a/packages/emerald/package.json b/packages/emerald/package.json new file mode 100644 index 000000000..957dc6766 --- /dev/null +++ b/packages/emerald/package.json @@ -0,0 +1,42 @@ +{ + "name": "@paper/emerald", + "version": "0.1.0", + "description": "Emerald Design System", + "license": "MIT", + "types": "./dist/index.d.mts", + "type": "module", + "files": [ + "dist" + ], + "scripts": { + "build": "tsdown", + "typecheck": "vue-tsc --noEmit --incremental" + }, + "peerDependencies": { + "vue": ">=3.3.0" + }, + "exports": { + ".": { + "development": "./src/index.ts", + "default": "./dist/index.mjs" + }, + "./package.json": "./package.json", + "./style.css": "./dist/style.css" + }, + "publishConfig": { + "exports": { + ".": "./dist/index.mjs", + "./package.json": "./package.json", + "./style.css": "./dist/style.css" + } + }, + "dependencies": { + "@vuetify/paper": "workspace:*", + "@vuetify/v0": "workspace:*" + }, + "devDependencies": { + "tsdown": "catalog:", + "typescript": "catalog:", + "unplugin-vue": "catalog:" + } +} diff --git a/packages/emerald/src/adapter.ts b/packages/emerald/src/adapter.ts new file mode 100644 index 000000000..6badbf3ef --- /dev/null +++ b/packages/emerald/src/adapter.ts @@ -0,0 +1,56 @@ +// Framework +import { V0StyleSheetThemeAdapter } from '@vuetify/v0' +import { hexToRgb } from '@vuetify/v0/utilities' + +// Types +import type { Colors } from '@vuetify/v0' + +export interface EmeraldAdapterOptions { + cspNonce?: string + stylesheetId?: string + prefix?: string +} + +const SAFE_IDENT = /^[a-zA-Z0-9_-]+$/ +const UNSAFE_CSS = /url\s*\(|@import|expression\s*\(|[{}]/i + +export class EmeraldStyleSheetAdapter extends V0StyleSheetThemeAdapter { + constructor (options: EmeraldAdapterOptions = {}) { + super({ prefix: 'emerald', stylesheetId: 'emerald-theme-stylesheet', ...options }) + } + + override generate (colors: Record, isDark?: boolean): string { + let css = '' + + for (const theme in colors) { + if (!SAFE_IDENT.test(theme)) continue + const themeColors = colors[theme] + if (!themeColors) continue + + const lines: string[] = [] + + for (const [key, val] of Object.entries(themeColors)) { + if (!SAFE_IDENT.test(key) || UNSAFE_CSS.test(val)) continue + + lines.push(` --${this.prefix}-${key}: ${val};`) + + const channels = toChannels(val) + if (channels) lines.push(` --${this.prefix}-${key}-channels: ${channels};`) + } + + css += `[data-theme="${theme}"] {\n${lines.join('\n')}\n color: var(--${this.prefix}-on-background);\n}\n` + } + + if (isDark !== undefined) { + css += `:root {\n color-scheme: ${isDark ? 'dark' : 'light'};\n}\n` + } + + return css + } +} + +function toChannels (hex: string): string | null { + if (!/^#[0-9a-f]{3,8}$/i.test(hex)) return null + const { r, g, b } = hexToRgb(hex) + return `${r} ${g} ${b}` +} diff --git a/packages/emerald/src/components/EmAccordion/EmAccordion.vue b/packages/emerald/src/components/EmAccordion/EmAccordion.vue new file mode 100644 index 000000000..90373a110 --- /dev/null +++ b/packages/emerald/src/components/EmAccordion/EmAccordion.vue @@ -0,0 +1,58 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAccordion/EmAccordionContent.vue b/packages/emerald/src/components/EmAccordion/EmAccordionContent.vue new file mode 100644 index 000000000..2548a1ecc --- /dev/null +++ b/packages/emerald/src/components/EmAccordion/EmAccordionContent.vue @@ -0,0 +1,58 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAccordion/EmAccordionCue.vue b/packages/emerald/src/components/EmAccordion/EmAccordionCue.vue new file mode 100644 index 000000000..ebc3099b6 --- /dev/null +++ b/packages/emerald/src/components/EmAccordion/EmAccordionCue.vue @@ -0,0 +1,30 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAccordion/EmAccordionHeader.vue b/packages/emerald/src/components/EmAccordion/EmAccordionHeader.vue new file mode 100644 index 000000000..76736b95a --- /dev/null +++ b/packages/emerald/src/components/EmAccordion/EmAccordionHeader.vue @@ -0,0 +1,25 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAccordion/EmAccordionItem.vue b/packages/emerald/src/components/EmAccordion/EmAccordionItem.vue new file mode 100644 index 000000000..638c966c2 --- /dev/null +++ b/packages/emerald/src/components/EmAccordion/EmAccordionItem.vue @@ -0,0 +1,46 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAccordion/EmAccordionTrigger.vue b/packages/emerald/src/components/EmAccordion/EmAccordionTrigger.vue new file mode 100644 index 000000000..22fb2dabc --- /dev/null +++ b/packages/emerald/src/components/EmAccordion/EmAccordionTrigger.vue @@ -0,0 +1,44 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAccordion/index.ts b/packages/emerald/src/components/EmAccordion/index.ts new file mode 100644 index 000000000..3f507b491 --- /dev/null +++ b/packages/emerald/src/components/EmAccordion/index.ts @@ -0,0 +1,17 @@ +export type { EmAccordionProps } from './EmAccordion.vue' +export { default as EmAccordion } from './EmAccordion.vue' + +export type { EmAccordionContentProps } from './EmAccordionContent.vue' +export { default as EmAccordionContent } from './EmAccordionContent.vue' + +export type { EmAccordionCueProps } from './EmAccordionCue.vue' +export { default as EmAccordionCue } from './EmAccordionCue.vue' + +export type { EmAccordionHeaderProps } from './EmAccordionHeader.vue' +export { default as EmAccordionHeader } from './EmAccordionHeader.vue' + +export type { EmAccordionItemProps } from './EmAccordionItem.vue' +export { default as EmAccordionItem } from './EmAccordionItem.vue' + +export type { EmAccordionTriggerProps } from './EmAccordionTrigger.vue' +export { default as EmAccordionTrigger } from './EmAccordionTrigger.vue' diff --git a/packages/emerald/src/components/EmAlert/EmAlert.vue b/packages/emerald/src/components/EmAlert/EmAlert.vue new file mode 100644 index 000000000..613e54da3 --- /dev/null +++ b/packages/emerald/src/components/EmAlert/EmAlert.vue @@ -0,0 +1,133 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAlert/EmAlertBody.vue b/packages/emerald/src/components/EmAlert/EmAlertBody.vue new file mode 100644 index 000000000..57c82cdab --- /dev/null +++ b/packages/emerald/src/components/EmAlert/EmAlertBody.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmAlert/EmAlertClose.vue b/packages/emerald/src/components/EmAlert/EmAlertClose.vue new file mode 100644 index 000000000..8ab7745f5 --- /dev/null +++ b/packages/emerald/src/components/EmAlert/EmAlertClose.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/packages/emerald/src/components/EmAlert/EmAlertDescription.vue b/packages/emerald/src/components/EmAlert/EmAlertDescription.vue new file mode 100644 index 000000000..facee2301 --- /dev/null +++ b/packages/emerald/src/components/EmAlert/EmAlertDescription.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmAlert/EmAlertIcon.vue b/packages/emerald/src/components/EmAlert/EmAlertIcon.vue new file mode 100644 index 000000000..d8a39a00e --- /dev/null +++ b/packages/emerald/src/components/EmAlert/EmAlertIcon.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmAlert/EmAlertTitle.vue b/packages/emerald/src/components/EmAlert/EmAlertTitle.vue new file mode 100644 index 000000000..3b7221238 --- /dev/null +++ b/packages/emerald/src/components/EmAlert/EmAlertTitle.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmAlert/index.ts b/packages/emerald/src/components/EmAlert/index.ts new file mode 100644 index 000000000..4cd318f9c --- /dev/null +++ b/packages/emerald/src/components/EmAlert/index.ts @@ -0,0 +1,17 @@ +export type { EmAlertProps, EmAlertVariant } from './EmAlert.vue' +export { default as EmAlert } from './EmAlert.vue' + +export type { EmAlertBodyProps } from './EmAlertBody.vue' +export { default as EmAlertBody } from './EmAlertBody.vue' + +export type { EmAlertCloseProps } from './EmAlertClose.vue' +export { default as EmAlertClose } from './EmAlertClose.vue' + +export type { EmAlertDescriptionProps } from './EmAlertDescription.vue' +export { default as EmAlertDescription } from './EmAlertDescription.vue' + +export type { EmAlertIconProps } from './EmAlertIcon.vue' +export { default as EmAlertIcon } from './EmAlertIcon.vue' + +export type { EmAlertTitleProps } from './EmAlertTitle.vue' +export { default as EmAlertTitle } from './EmAlertTitle.vue' diff --git a/packages/emerald/src/components/EmAutoComplete/EmAutoComplete.vue b/packages/emerald/src/components/EmAutoComplete/EmAutoComplete.vue new file mode 100644 index 000000000..04c272319 --- /dev/null +++ b/packages/emerald/src/components/EmAutoComplete/EmAutoComplete.vue @@ -0,0 +1,80 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteContent.vue b/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteContent.vue new file mode 100644 index 000000000..e7383b765 --- /dev/null +++ b/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteContent.vue @@ -0,0 +1,45 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteControl.vue b/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteControl.vue new file mode 100644 index 000000000..b668936be --- /dev/null +++ b/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteControl.vue @@ -0,0 +1,40 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteEmpty.vue b/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteEmpty.vue new file mode 100644 index 000000000..73294be0c --- /dev/null +++ b/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteEmpty.vue @@ -0,0 +1,31 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteInput.vue b/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteInput.vue new file mode 100644 index 000000000..ffffb2cc5 --- /dev/null +++ b/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteInput.vue @@ -0,0 +1,47 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteItem.vue b/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteItem.vue new file mode 100644 index 000000000..2920a568a --- /dev/null +++ b/packages/emerald/src/components/EmAutoComplete/EmAutoCompleteItem.vue @@ -0,0 +1,69 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAutoComplete/index.ts b/packages/emerald/src/components/EmAutoComplete/index.ts new file mode 100644 index 000000000..0053ffef4 --- /dev/null +++ b/packages/emerald/src/components/EmAutoComplete/index.ts @@ -0,0 +1,17 @@ +export type { EmAutoCompleteProps } from './EmAutoComplete.vue' +export { default as EmAutoComplete } from './EmAutoComplete.vue' + +export type { EmAutoCompleteContentProps } from './EmAutoCompleteContent.vue' +export { default as EmAutoCompleteContent } from './EmAutoCompleteContent.vue' + +export type { EmAutoCompleteControlProps } from './EmAutoCompleteControl.vue' +export { default as EmAutoCompleteControl } from './EmAutoCompleteControl.vue' + +export type { EmAutoCompleteEmptyProps } from './EmAutoCompleteEmpty.vue' +export { default as EmAutoCompleteEmpty } from './EmAutoCompleteEmpty.vue' + +export type { EmAutoCompleteInputProps } from './EmAutoCompleteInput.vue' +export { default as EmAutoCompleteInput } from './EmAutoCompleteInput.vue' + +export type { EmAutoCompleteItemProps } from './EmAutoCompleteItem.vue' +export { default as EmAutoCompleteItem } from './EmAutoCompleteItem.vue' diff --git a/packages/emerald/src/components/EmAvatar/EmAvatar.vue b/packages/emerald/src/components/EmAvatar/EmAvatar.vue new file mode 100644 index 000000000..74bc81f74 --- /dev/null +++ b/packages/emerald/src/components/EmAvatar/EmAvatar.vue @@ -0,0 +1,97 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmAvatar/EmAvatarFallback.vue b/packages/emerald/src/components/EmAvatar/EmAvatarFallback.vue new file mode 100644 index 000000000..0518756ca --- /dev/null +++ b/packages/emerald/src/components/EmAvatar/EmAvatarFallback.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/packages/emerald/src/components/EmAvatar/EmAvatarImage.vue b/packages/emerald/src/components/EmAvatar/EmAvatarImage.vue new file mode 100644 index 000000000..75d6a8243 --- /dev/null +++ b/packages/emerald/src/components/EmAvatar/EmAvatarImage.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/packages/emerald/src/components/EmAvatar/index.ts b/packages/emerald/src/components/EmAvatar/index.ts new file mode 100644 index 000000000..4ce5ebb1e --- /dev/null +++ b/packages/emerald/src/components/EmAvatar/index.ts @@ -0,0 +1,8 @@ +export type { EmAvatarProps, EmAvatarSize } from './EmAvatar.vue' +export { default as EmAvatar } from './EmAvatar.vue' + +export type { EmAvatarFallbackProps } from './EmAvatarFallback.vue' +export { default as EmAvatarFallback } from './EmAvatarFallback.vue' + +export type { EmAvatarImageProps } from './EmAvatarImage.vue' +export { default as EmAvatarImage } from './EmAvatarImage.vue' diff --git a/packages/emerald/src/components/EmBadge/EmBadge.vue b/packages/emerald/src/components/EmBadge/EmBadge.vue new file mode 100644 index 000000000..f097ec523 --- /dev/null +++ b/packages/emerald/src/components/EmBadge/EmBadge.vue @@ -0,0 +1,147 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmBadge/index.ts b/packages/emerald/src/components/EmBadge/index.ts new file mode 100644 index 000000000..10ee64019 --- /dev/null +++ b/packages/emerald/src/components/EmBadge/index.ts @@ -0,0 +1,2 @@ +export type { EmBadgeProps, EmBadgeSize, EmBadgeVariant } from './EmBadge.vue' +export { default as EmBadge } from './EmBadge.vue' diff --git a/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumb.vue b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumb.vue new file mode 100644 index 000000000..e8cc4f555 --- /dev/null +++ b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumb.vue @@ -0,0 +1,53 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbDivider.vue b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbDivider.vue new file mode 100644 index 000000000..1236059e9 --- /dev/null +++ b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbDivider.vue @@ -0,0 +1,43 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbEllipsis.vue b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbEllipsis.vue new file mode 100644 index 000000000..4a9f53c8e --- /dev/null +++ b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbEllipsis.vue @@ -0,0 +1,36 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbItem.vue b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbItem.vue new file mode 100644 index 000000000..aae7bf9f5 --- /dev/null +++ b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbItem.vue @@ -0,0 +1,47 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbLink.vue b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbLink.vue new file mode 100644 index 000000000..a4142e0fd --- /dev/null +++ b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbLink.vue @@ -0,0 +1,47 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbList.vue b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbList.vue new file mode 100644 index 000000000..8bf6858c3 --- /dev/null +++ b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbList.vue @@ -0,0 +1,30 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbPage.vue b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbPage.vue new file mode 100644 index 000000000..45b165a8f --- /dev/null +++ b/packages/emerald/src/components/EmBreadcrumb/EmBreadcrumbPage.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmBreadcrumb/index.ts b/packages/emerald/src/components/EmBreadcrumb/index.ts new file mode 100644 index 000000000..bea9be1d0 --- /dev/null +++ b/packages/emerald/src/components/EmBreadcrumb/index.ts @@ -0,0 +1,20 @@ +export type { EmBreadcrumbProps } from './EmBreadcrumb.vue' +export { default as EmBreadcrumb } from './EmBreadcrumb.vue' + +export type { EmBreadcrumbDividerProps } from './EmBreadcrumbDivider.vue' +export { default as EmBreadcrumbDivider } from './EmBreadcrumbDivider.vue' + +export type { EmBreadcrumbEllipsisProps } from './EmBreadcrumbEllipsis.vue' +export { default as EmBreadcrumbEllipsis } from './EmBreadcrumbEllipsis.vue' + +export type { EmBreadcrumbItemProps } from './EmBreadcrumbItem.vue' +export { default as EmBreadcrumbItem } from './EmBreadcrumbItem.vue' + +export type { EmBreadcrumbLinkProps } from './EmBreadcrumbLink.vue' +export { default as EmBreadcrumbLink } from './EmBreadcrumbLink.vue' + +export type { EmBreadcrumbListProps } from './EmBreadcrumbList.vue' +export { default as EmBreadcrumbList } from './EmBreadcrumbList.vue' + +export type { EmBreadcrumbPageProps } from './EmBreadcrumbPage.vue' +export { default as EmBreadcrumbPage } from './EmBreadcrumbPage.vue' diff --git a/packages/emerald/src/components/EmButton/EmButton.vue b/packages/emerald/src/components/EmButton/EmButton.vue new file mode 100644 index 000000000..da050f3f4 --- /dev/null +++ b/packages/emerald/src/components/EmButton/EmButton.vue @@ -0,0 +1,159 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmButton/EmButtonAppend.vue b/packages/emerald/src/components/EmButton/EmButtonAppend.vue new file mode 100644 index 000000000..185d10205 --- /dev/null +++ b/packages/emerald/src/components/EmButton/EmButtonAppend.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmButton/EmButtonContent.vue b/packages/emerald/src/components/EmButton/EmButtonContent.vue new file mode 100644 index 000000000..e3c35f92e --- /dev/null +++ b/packages/emerald/src/components/EmButton/EmButtonContent.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmButton/EmButtonLoader.vue b/packages/emerald/src/components/EmButton/EmButtonLoader.vue new file mode 100644 index 000000000..cca983ef1 --- /dev/null +++ b/packages/emerald/src/components/EmButton/EmButtonLoader.vue @@ -0,0 +1,38 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmButton/EmButtonPrepend.vue b/packages/emerald/src/components/EmButton/EmButtonPrepend.vue new file mode 100644 index 000000000..be76e07d1 --- /dev/null +++ b/packages/emerald/src/components/EmButton/EmButtonPrepend.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmButton/index.ts b/packages/emerald/src/components/EmButton/index.ts new file mode 100644 index 000000000..8176c4a1a --- /dev/null +++ b/packages/emerald/src/components/EmButton/index.ts @@ -0,0 +1,14 @@ +export type { EmButtonProps } from './EmButton.vue' +export { default as EmButton } from './EmButton.vue' + +export type { EmButtonAppendProps } from './EmButtonAppend.vue' +export { default as EmButtonAppend } from './EmButtonAppend.vue' + +export type { EmButtonContentProps } from './EmButtonContent.vue' +export { default as EmButtonContent } from './EmButtonContent.vue' + +export type { EmButtonLoaderProps } from './EmButtonLoader.vue' +export { default as EmButtonLoader } from './EmButtonLoader.vue' + +export type { EmButtonPrependProps } from './EmButtonPrepend.vue' +export { default as EmButtonPrepend } from './EmButtonPrepend.vue' diff --git a/packages/emerald/src/components/EmCard/EmCard.vue b/packages/emerald/src/components/EmCard/EmCard.vue new file mode 100644 index 000000000..20a5ed31c --- /dev/null +++ b/packages/emerald/src/components/EmCard/EmCard.vue @@ -0,0 +1,46 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCard/EmCardBody.vue b/packages/emerald/src/components/EmCard/EmCardBody.vue new file mode 100644 index 000000000..24fbdb60a --- /dev/null +++ b/packages/emerald/src/components/EmCard/EmCardBody.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCard/EmCardFooter.vue b/packages/emerald/src/components/EmCard/EmCardFooter.vue new file mode 100644 index 000000000..e9dfd067f --- /dev/null +++ b/packages/emerald/src/components/EmCard/EmCardFooter.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCard/EmCardHeader.vue b/packages/emerald/src/components/EmCard/EmCardHeader.vue new file mode 100644 index 000000000..906c5f70e --- /dev/null +++ b/packages/emerald/src/components/EmCard/EmCardHeader.vue @@ -0,0 +1,22 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCard/EmCardSubtitle.vue b/packages/emerald/src/components/EmCard/EmCardSubtitle.vue new file mode 100644 index 000000000..d0d4ce30f --- /dev/null +++ b/packages/emerald/src/components/EmCard/EmCardSubtitle.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCard/EmCardTitle.vue b/packages/emerald/src/components/EmCard/EmCardTitle.vue new file mode 100644 index 000000000..9746384a6 --- /dev/null +++ b/packages/emerald/src/components/EmCard/EmCardTitle.vue @@ -0,0 +1,29 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCard/index.ts b/packages/emerald/src/components/EmCard/index.ts new file mode 100644 index 000000000..c6b02f0fe --- /dev/null +++ b/packages/emerald/src/components/EmCard/index.ts @@ -0,0 +1,17 @@ +export type { EmCardProps } from './EmCard.vue' +export { default as EmCard } from './EmCard.vue' + +export type { EmCardBodyProps } from './EmCardBody.vue' +export { default as EmCardBody } from './EmCardBody.vue' + +export type { EmCardFooterProps } from './EmCardFooter.vue' +export { default as EmCardFooter } from './EmCardFooter.vue' + +export type { EmCardHeaderProps } from './EmCardHeader.vue' +export { default as EmCardHeader } from './EmCardHeader.vue' + +export type { EmCardSubtitleProps } from './EmCardSubtitle.vue' +export { default as EmCardSubtitle } from './EmCardSubtitle.vue' + +export type { EmCardTitleProps } from './EmCardTitle.vue' +export { default as EmCardTitle } from './EmCardTitle.vue' diff --git a/packages/emerald/src/components/EmCarousel/EmCarousel.vue b/packages/emerald/src/components/EmCarousel/EmCarousel.vue new file mode 100644 index 000000000..4798b472a --- /dev/null +++ b/packages/emerald/src/components/EmCarousel/EmCarousel.vue @@ -0,0 +1,84 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCarousel/EmCarouselIndicator.vue b/packages/emerald/src/components/EmCarousel/EmCarouselIndicator.vue new file mode 100644 index 000000000..2851b717b --- /dev/null +++ b/packages/emerald/src/components/EmCarousel/EmCarouselIndicator.vue @@ -0,0 +1,67 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCarousel/EmCarouselItem.vue b/packages/emerald/src/components/EmCarousel/EmCarouselItem.vue new file mode 100644 index 000000000..daaf188fe --- /dev/null +++ b/packages/emerald/src/components/EmCarousel/EmCarouselItem.vue @@ -0,0 +1,66 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCarousel/EmCarouselNext.vue b/packages/emerald/src/components/EmCarousel/EmCarouselNext.vue new file mode 100644 index 000000000..7cba6fa99 --- /dev/null +++ b/packages/emerald/src/components/EmCarousel/EmCarouselNext.vue @@ -0,0 +1,51 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCarousel/EmCarouselPrevious.vue b/packages/emerald/src/components/EmCarousel/EmCarouselPrevious.vue new file mode 100644 index 000000000..b4fcfe299 --- /dev/null +++ b/packages/emerald/src/components/EmCarousel/EmCarouselPrevious.vue @@ -0,0 +1,51 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCarousel/EmCarouselViewport.vue b/packages/emerald/src/components/EmCarousel/EmCarouselViewport.vue new file mode 100644 index 000000000..bec40e553 --- /dev/null +++ b/packages/emerald/src/components/EmCarousel/EmCarouselViewport.vue @@ -0,0 +1,38 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCarousel/index.ts b/packages/emerald/src/components/EmCarousel/index.ts new file mode 100644 index 000000000..baf5f06b8 --- /dev/null +++ b/packages/emerald/src/components/EmCarousel/index.ts @@ -0,0 +1,17 @@ +export type { EmCarouselProps } from './EmCarousel.vue' +export { default as EmCarousel } from './EmCarousel.vue' + +export type { EmCarouselIndicatorProps } from './EmCarouselIndicator.vue' +export { default as EmCarouselIndicator } from './EmCarouselIndicator.vue' + +export type { EmCarouselItemProps } from './EmCarouselItem.vue' +export { default as EmCarouselItem } from './EmCarouselItem.vue' + +export type { EmCarouselNextProps } from './EmCarouselNext.vue' +export { default as EmCarouselNext } from './EmCarouselNext.vue' + +export type { EmCarouselPreviousProps } from './EmCarouselPrevious.vue' +export { default as EmCarouselPrevious } from './EmCarouselPrevious.vue' + +export type { EmCarouselViewportProps } from './EmCarouselViewport.vue' +export { default as EmCarouselViewport } from './EmCarouselViewport.vue' diff --git a/packages/emerald/src/components/EmCheckbox/EmCheckbox.vue b/packages/emerald/src/components/EmCheckbox/EmCheckbox.vue new file mode 100644 index 000000000..8b30bab65 --- /dev/null +++ b/packages/emerald/src/components/EmCheckbox/EmCheckbox.vue @@ -0,0 +1,102 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCheckbox/EmCheckboxGroup.vue b/packages/emerald/src/components/EmCheckbox/EmCheckboxGroup.vue new file mode 100644 index 000000000..88270264a --- /dev/null +++ b/packages/emerald/src/components/EmCheckbox/EmCheckboxGroup.vue @@ -0,0 +1,47 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCheckbox/EmCheckboxIndicator.vue b/packages/emerald/src/components/EmCheckbox/EmCheckboxIndicator.vue new file mode 100644 index 000000000..c0c222873 --- /dev/null +++ b/packages/emerald/src/components/EmCheckbox/EmCheckboxIndicator.vue @@ -0,0 +1,142 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmCheckbox/EmCheckboxSelectAll.vue b/packages/emerald/src/components/EmCheckbox/EmCheckboxSelectAll.vue new file mode 100644 index 000000000..e8f770a55 --- /dev/null +++ b/packages/emerald/src/components/EmCheckbox/EmCheckboxSelectAll.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/packages/emerald/src/components/EmCheckbox/index.ts b/packages/emerald/src/components/EmCheckbox/index.ts new file mode 100644 index 000000000..8afbd1cef --- /dev/null +++ b/packages/emerald/src/components/EmCheckbox/index.ts @@ -0,0 +1,11 @@ +export type { EmCheckboxProps } from './EmCheckbox.vue' +export { default as EmCheckbox } from './EmCheckbox.vue' + +export type { EmCheckboxGroupProps } from './EmCheckboxGroup.vue' +export { default as EmCheckboxGroup } from './EmCheckboxGroup.vue' + +export type { EmCheckboxIndicatorProps } from './EmCheckboxIndicator.vue' +export { default as EmCheckboxIndicator } from './EmCheckboxIndicator.vue' + +export type { EmCheckboxSelectAllProps } from './EmCheckboxSelectAll.vue' +export { default as EmCheckboxSelectAll } from './EmCheckboxSelectAll.vue' diff --git a/packages/emerald/src/components/EmContainer/EmContainer.vue b/packages/emerald/src/components/EmContainer/EmContainer.vue new file mode 100644 index 000000000..fa25e8b0c --- /dev/null +++ b/packages/emerald/src/components/EmContainer/EmContainer.vue @@ -0,0 +1,44 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmContainer/index.ts b/packages/emerald/src/components/EmContainer/index.ts new file mode 100644 index 000000000..faa8a0032 --- /dev/null +++ b/packages/emerald/src/components/EmContainer/index.ts @@ -0,0 +1,2 @@ +export { default as EmContainer } from './EmContainer.vue' +export type { EmContainerProps } from './EmContainer.vue' diff --git a/packages/emerald/src/components/EmDatePicker/EmDatePicker.vue b/packages/emerald/src/components/EmDatePicker/EmDatePicker.vue new file mode 100644 index 000000000..930189b13 --- /dev/null +++ b/packages/emerald/src/components/EmDatePicker/EmDatePicker.vue @@ -0,0 +1,55 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDatePicker/EmDatePickerCalendar.vue b/packages/emerald/src/components/EmDatePicker/EmDatePickerCalendar.vue new file mode 100644 index 000000000..4fb82f268 --- /dev/null +++ b/packages/emerald/src/components/EmDatePicker/EmDatePickerCalendar.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDatePicker/EmDatePickerCell.vue b/packages/emerald/src/components/EmDatePicker/EmDatePickerCell.vue new file mode 100644 index 000000000..ceab27e6b --- /dev/null +++ b/packages/emerald/src/components/EmDatePicker/EmDatePickerCell.vue @@ -0,0 +1,88 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDatePicker/EmDatePickerGrid.vue b/packages/emerald/src/components/EmDatePicker/EmDatePickerGrid.vue new file mode 100644 index 000000000..e5fef7dd4 --- /dev/null +++ b/packages/emerald/src/components/EmDatePicker/EmDatePickerGrid.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDatePicker/EmDatePickerHeader.vue b/packages/emerald/src/components/EmDatePicker/EmDatePickerHeader.vue new file mode 100644 index 000000000..c10447eea --- /dev/null +++ b/packages/emerald/src/components/EmDatePicker/EmDatePickerHeader.vue @@ -0,0 +1,41 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDatePicker/EmDatePickerInput.vue b/packages/emerald/src/components/EmDatePicker/EmDatePickerInput.vue new file mode 100644 index 000000000..e256205c8 --- /dev/null +++ b/packages/emerald/src/components/EmDatePicker/EmDatePickerInput.vue @@ -0,0 +1,50 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDatePicker/index.ts b/packages/emerald/src/components/EmDatePicker/index.ts new file mode 100644 index 000000000..9973ff78c --- /dev/null +++ b/packages/emerald/src/components/EmDatePicker/index.ts @@ -0,0 +1,17 @@ +export type { EmDatePickerProps } from './EmDatePicker.vue' +export { default as EmDatePicker } from './EmDatePicker.vue' + +export type { EmDatePickerCalendarProps } from './EmDatePickerCalendar.vue' +export { default as EmDatePickerCalendar } from './EmDatePickerCalendar.vue' + +export type { EmDatePickerCellProps } from './EmDatePickerCell.vue' +export { default as EmDatePickerCell } from './EmDatePickerCell.vue' + +export type { EmDatePickerGridProps } from './EmDatePickerGrid.vue' +export { default as EmDatePickerGrid } from './EmDatePickerGrid.vue' + +export type { EmDatePickerHeaderProps } from './EmDatePickerHeader.vue' +export { default as EmDatePickerHeader } from './EmDatePickerHeader.vue' + +export type { EmDatePickerInputProps } from './EmDatePickerInput.vue' +export { default as EmDatePickerInput } from './EmDatePickerInput.vue' diff --git a/packages/emerald/src/components/EmDialog/EmDialog.vue b/packages/emerald/src/components/EmDialog/EmDialog.vue new file mode 100644 index 000000000..31de51a34 --- /dev/null +++ b/packages/emerald/src/components/EmDialog/EmDialog.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/packages/emerald/src/components/EmDialog/EmDialogActivator.vue b/packages/emerald/src/components/EmDialog/EmDialogActivator.vue new file mode 100644 index 000000000..16534eca6 --- /dev/null +++ b/packages/emerald/src/components/EmDialog/EmDialogActivator.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/packages/emerald/src/components/EmDialog/EmDialogBody.vue b/packages/emerald/src/components/EmDialog/EmDialogBody.vue new file mode 100644 index 000000000..b14796b1b --- /dev/null +++ b/packages/emerald/src/components/EmDialog/EmDialogBody.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDialog/EmDialogClose.vue b/packages/emerald/src/components/EmDialog/EmDialogClose.vue new file mode 100644 index 000000000..1e4363923 --- /dev/null +++ b/packages/emerald/src/components/EmDialog/EmDialogClose.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/packages/emerald/src/components/EmDialog/EmDialogContent.vue b/packages/emerald/src/components/EmDialog/EmDialogContent.vue new file mode 100644 index 000000000..6de32068d --- /dev/null +++ b/packages/emerald/src/components/EmDialog/EmDialogContent.vue @@ -0,0 +1,80 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDialog/EmDialogDescription.vue b/packages/emerald/src/components/EmDialog/EmDialogDescription.vue new file mode 100644 index 000000000..037b64454 --- /dev/null +++ b/packages/emerald/src/components/EmDialog/EmDialogDescription.vue @@ -0,0 +1,27 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDialog/EmDialogFooter.vue b/packages/emerald/src/components/EmDialog/EmDialogFooter.vue new file mode 100644 index 000000000..4a805e250 --- /dev/null +++ b/packages/emerald/src/components/EmDialog/EmDialogFooter.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDialog/EmDialogHeader.vue b/packages/emerald/src/components/EmDialog/EmDialogHeader.vue new file mode 100644 index 000000000..363965821 --- /dev/null +++ b/packages/emerald/src/components/EmDialog/EmDialogHeader.vue @@ -0,0 +1,22 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDialog/EmDialogTitle.vue b/packages/emerald/src/components/EmDialog/EmDialogTitle.vue new file mode 100644 index 000000000..27fc1a984 --- /dev/null +++ b/packages/emerald/src/components/EmDialog/EmDialogTitle.vue @@ -0,0 +1,28 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDialog/index.ts b/packages/emerald/src/components/EmDialog/index.ts new file mode 100644 index 000000000..b333f1fbf --- /dev/null +++ b/packages/emerald/src/components/EmDialog/index.ts @@ -0,0 +1,26 @@ +export type { EmDialogProps } from './EmDialog.vue' +export { default as EmDialog } from './EmDialog.vue' + +export type { EmDialogActivatorProps } from './EmDialogActivator.vue' +export { default as EmDialogActivator } from './EmDialogActivator.vue' + +export type { EmDialogBodyProps } from './EmDialogBody.vue' +export { default as EmDialogBody } from './EmDialogBody.vue' + +export type { EmDialogCloseProps } from './EmDialogClose.vue' +export { default as EmDialogClose } from './EmDialogClose.vue' + +export type { EmDialogContentProps } from './EmDialogContent.vue' +export { default as EmDialogContent } from './EmDialogContent.vue' + +export type { EmDialogDescriptionProps } from './EmDialogDescription.vue' +export { default as EmDialogDescription } from './EmDialogDescription.vue' + +export type { EmDialogFooterProps } from './EmDialogFooter.vue' +export { default as EmDialogFooter } from './EmDialogFooter.vue' + +export type { EmDialogHeaderProps } from './EmDialogHeader.vue' +export { default as EmDialogHeader } from './EmDialogHeader.vue' + +export type { EmDialogTitleProps } from './EmDialogTitle.vue' +export { default as EmDialogTitle } from './EmDialogTitle.vue' diff --git a/packages/emerald/src/components/EmDivider/EmDivider.vue b/packages/emerald/src/components/EmDivider/EmDivider.vue new file mode 100644 index 000000000..0bf3ea58d --- /dev/null +++ b/packages/emerald/src/components/EmDivider/EmDivider.vue @@ -0,0 +1,52 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDivider/EmDividerLabel.vue b/packages/emerald/src/components/EmDivider/EmDividerLabel.vue new file mode 100644 index 000000000..45f4b4116 --- /dev/null +++ b/packages/emerald/src/components/EmDivider/EmDividerLabel.vue @@ -0,0 +1,32 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDivider/EmDividerLine.vue b/packages/emerald/src/components/EmDivider/EmDividerLine.vue new file mode 100644 index 000000000..bd2844661 --- /dev/null +++ b/packages/emerald/src/components/EmDivider/EmDividerLine.vue @@ -0,0 +1,57 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmDivider/index.ts b/packages/emerald/src/components/EmDivider/index.ts new file mode 100644 index 000000000..2422b060c --- /dev/null +++ b/packages/emerald/src/components/EmDivider/index.ts @@ -0,0 +1,8 @@ +export type { EmDividerProps } from './EmDivider.vue' +export { default as EmDivider } from './EmDivider.vue' + +export type { EmDividerLabelProps } from './EmDividerLabel.vue' +export { default as EmDividerLabel } from './EmDividerLabel.vue' + +export type { EmDividerLineProps } from './EmDividerLine.vue' +export { default as EmDividerLine } from './EmDividerLine.vue' diff --git a/packages/emerald/src/components/EmFlex/EmFlex.vue b/packages/emerald/src/components/EmFlex/EmFlex.vue new file mode 100644 index 000000000..99da817dc --- /dev/null +++ b/packages/emerald/src/components/EmFlex/EmFlex.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/packages/emerald/src/components/EmFlex/index.ts b/packages/emerald/src/components/EmFlex/index.ts new file mode 100644 index 000000000..dbffc61ab --- /dev/null +++ b/packages/emerald/src/components/EmFlex/index.ts @@ -0,0 +1,9 @@ +export type { + EmFlexAlign, + EmFlexDirection, + EmFlexGap, + EmFlexJustify, + EmFlexProps, + EmFlexWrap, +} from './EmFlex.vue' +export { default as EmFlex } from './EmFlex.vue' diff --git a/packages/emerald/src/components/EmForm/EmForm.vue b/packages/emerald/src/components/EmForm/EmForm.vue new file mode 100644 index 000000000..fdf486eaa --- /dev/null +++ b/packages/emerald/src/components/EmForm/EmForm.vue @@ -0,0 +1,164 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmForm/index.ts b/packages/emerald/src/components/EmForm/index.ts new file mode 100644 index 000000000..ace186a59 --- /dev/null +++ b/packages/emerald/src/components/EmForm/index.ts @@ -0,0 +1,2 @@ +export { default as EmForm } from './EmForm.vue' +export type { EmFormProps } from './EmForm.vue' diff --git a/packages/emerald/src/components/EmGrid/EmGrid.vue b/packages/emerald/src/components/EmGrid/EmGrid.vue new file mode 100644 index 000000000..7545cbbab --- /dev/null +++ b/packages/emerald/src/components/EmGrid/EmGrid.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/packages/emerald/src/components/EmGrid/EmGridItem.vue b/packages/emerald/src/components/EmGrid/EmGridItem.vue new file mode 100644 index 000000000..f97cdd3ee --- /dev/null +++ b/packages/emerald/src/components/EmGrid/EmGridItem.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/packages/emerald/src/components/EmGrid/index.ts b/packages/emerald/src/components/EmGrid/index.ts new file mode 100644 index 000000000..8fd8c8da2 --- /dev/null +++ b/packages/emerald/src/components/EmGrid/index.ts @@ -0,0 +1,5 @@ +export type { EmGridGap, EmGridProps } from './EmGrid.vue' +export { default as EmGrid } from './EmGrid.vue' + +export type { EmGridItemProps } from './EmGridItem.vue' +export { default as EmGridItem } from './EmGridItem.vue' diff --git a/packages/emerald/src/components/EmList/EmList.vue b/packages/emerald/src/components/EmList/EmList.vue new file mode 100644 index 000000000..69e9729a9 --- /dev/null +++ b/packages/emerald/src/components/EmList/EmList.vue @@ -0,0 +1,178 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmList/EmListItem.vue b/packages/emerald/src/components/EmList/EmListItem.vue new file mode 100644 index 000000000..a43c66282 --- /dev/null +++ b/packages/emerald/src/components/EmList/EmListItem.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/packages/emerald/src/components/EmList/EmListItemAction.vue b/packages/emerald/src/components/EmList/EmListItemAction.vue new file mode 100644 index 000000000..9a16527a7 --- /dev/null +++ b/packages/emerald/src/components/EmList/EmListItemAction.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmList/EmListItemBody.vue b/packages/emerald/src/components/EmList/EmListItemBody.vue new file mode 100644 index 000000000..8d1d44fb8 --- /dev/null +++ b/packages/emerald/src/components/EmList/EmListItemBody.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmList/EmListItemIcon.vue b/packages/emerald/src/components/EmList/EmListItemIcon.vue new file mode 100644 index 000000000..edf3054f8 --- /dev/null +++ b/packages/emerald/src/components/EmList/EmListItemIcon.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmList/EmListItemSubtitle.vue b/packages/emerald/src/components/EmList/EmListItemSubtitle.vue new file mode 100644 index 000000000..ca52f0ee7 --- /dev/null +++ b/packages/emerald/src/components/EmList/EmListItemSubtitle.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmList/EmListItemTitle.vue b/packages/emerald/src/components/EmList/EmListItemTitle.vue new file mode 100644 index 000000000..e41d1ea92 --- /dev/null +++ b/packages/emerald/src/components/EmList/EmListItemTitle.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmList/EmListSeparator.vue b/packages/emerald/src/components/EmList/EmListSeparator.vue new file mode 100644 index 000000000..2f3bed03a --- /dev/null +++ b/packages/emerald/src/components/EmList/EmListSeparator.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/packages/emerald/src/components/EmList/EmListSubheader.vue b/packages/emerald/src/components/EmList/EmListSubheader.vue new file mode 100644 index 000000000..8a5f1e70f --- /dev/null +++ b/packages/emerald/src/components/EmList/EmListSubheader.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmList/index.ts b/packages/emerald/src/components/EmList/index.ts new file mode 100644 index 000000000..abd3772f4 --- /dev/null +++ b/packages/emerald/src/components/EmList/index.ts @@ -0,0 +1,26 @@ +export type { EmListProps } from './EmList.vue' +export { default as EmList } from './EmList.vue' + +export type { EmListItemProps } from './EmListItem.vue' +export { default as EmListItem } from './EmListItem.vue' + +export type { EmListItemActionProps } from './EmListItemAction.vue' +export { default as EmListItemAction } from './EmListItemAction.vue' + +export type { EmListItemBodyProps } from './EmListItemBody.vue' +export { default as EmListItemBody } from './EmListItemBody.vue' + +export type { EmListItemIconProps } from './EmListItemIcon.vue' +export { default as EmListItemIcon } from './EmListItemIcon.vue' + +export type { EmListItemSubtitleProps } from './EmListItemSubtitle.vue' +export { default as EmListItemSubtitle } from './EmListItemSubtitle.vue' + +export type { EmListItemTitleProps } from './EmListItemTitle.vue' +export { default as EmListItemTitle } from './EmListItemTitle.vue' + +export type { EmListSeparatorProps } from './EmListSeparator.vue' +export { default as EmListSeparator } from './EmListSeparator.vue' + +export type { EmListSubheaderProps } from './EmListSubheader.vue' +export { default as EmListSubheader } from './EmListSubheader.vue' diff --git a/packages/emerald/src/components/EmLoading/EmLoading.vue b/packages/emerald/src/components/EmLoading/EmLoading.vue new file mode 100644 index 000000000..979870c2f --- /dev/null +++ b/packages/emerald/src/components/EmLoading/EmLoading.vue @@ -0,0 +1,77 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmLoading/index.ts b/packages/emerald/src/components/EmLoading/index.ts new file mode 100644 index 000000000..7d0f67d4a --- /dev/null +++ b/packages/emerald/src/components/EmLoading/index.ts @@ -0,0 +1,2 @@ +export { default as EmLoading } from './EmLoading.vue' +export type { EmLoadingProps } from './EmLoading.vue' diff --git a/packages/emerald/src/components/EmMenu/EmMenu.vue b/packages/emerald/src/components/EmMenu/EmMenu.vue new file mode 100644 index 000000000..0c9cf15e2 --- /dev/null +++ b/packages/emerald/src/components/EmMenu/EmMenu.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/packages/emerald/src/components/EmMenu/EmMenuActivator.vue b/packages/emerald/src/components/EmMenu/EmMenuActivator.vue new file mode 100644 index 000000000..33c083c6c --- /dev/null +++ b/packages/emerald/src/components/EmMenu/EmMenuActivator.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/packages/emerald/src/components/EmMenu/EmMenuContent.vue b/packages/emerald/src/components/EmMenu/EmMenuContent.vue new file mode 100644 index 000000000..a6301da79 --- /dev/null +++ b/packages/emerald/src/components/EmMenu/EmMenuContent.vue @@ -0,0 +1,73 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmMenu/EmMenuItem.vue b/packages/emerald/src/components/EmMenu/EmMenuItem.vue new file mode 100644 index 000000000..5f174fc69 --- /dev/null +++ b/packages/emerald/src/components/EmMenu/EmMenuItem.vue @@ -0,0 +1,80 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmMenu/EmMenuLabel.vue b/packages/emerald/src/components/EmMenu/EmMenuLabel.vue new file mode 100644 index 000000000..d15488984 --- /dev/null +++ b/packages/emerald/src/components/EmMenu/EmMenuLabel.vue @@ -0,0 +1,29 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmMenu/EmMenuSeparator.vue b/packages/emerald/src/components/EmMenu/EmMenuSeparator.vue new file mode 100644 index 000000000..e74ee19a4 --- /dev/null +++ b/packages/emerald/src/components/EmMenu/EmMenuSeparator.vue @@ -0,0 +1,31 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmMenu/index.ts b/packages/emerald/src/components/EmMenu/index.ts new file mode 100644 index 000000000..34860c7c6 --- /dev/null +++ b/packages/emerald/src/components/EmMenu/index.ts @@ -0,0 +1,17 @@ +export type { EmMenuProps } from './EmMenu.vue' +export { default as EmMenu } from './EmMenu.vue' + +export type { EmMenuActivatorProps } from './EmMenuActivator.vue' +export { default as EmMenuActivator } from './EmMenuActivator.vue' + +export type { EmMenuContentProps } from './EmMenuContent.vue' +export { default as EmMenuContent } from './EmMenuContent.vue' + +export type { EmMenuItemProps } from './EmMenuItem.vue' +export { default as EmMenuItem } from './EmMenuItem.vue' + +export type { EmMenuLabelProps } from './EmMenuLabel.vue' +export { default as EmMenuLabel } from './EmMenuLabel.vue' + +export type { EmMenuSeparatorProps } from './EmMenuSeparator.vue' +export { default as EmMenuSeparator } from './EmMenuSeparator.vue' diff --git a/packages/emerald/src/components/EmPagination/EmPagination.vue b/packages/emerald/src/components/EmPagination/EmPagination.vue new file mode 100644 index 000000000..8d8ad4143 --- /dev/null +++ b/packages/emerald/src/components/EmPagination/EmPagination.vue @@ -0,0 +1,72 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmPagination/EmPaginationEllipsis.vue b/packages/emerald/src/components/EmPagination/EmPaginationEllipsis.vue new file mode 100644 index 000000000..d93b7ad58 --- /dev/null +++ b/packages/emerald/src/components/EmPagination/EmPaginationEllipsis.vue @@ -0,0 +1,36 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmPagination/EmPaginationFirst.vue b/packages/emerald/src/components/EmPagination/EmPaginationFirst.vue new file mode 100644 index 000000000..d9b639668 --- /dev/null +++ b/packages/emerald/src/components/EmPagination/EmPaginationFirst.vue @@ -0,0 +1,54 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmPagination/EmPaginationItem.vue b/packages/emerald/src/components/EmPagination/EmPaginationItem.vue new file mode 100644 index 000000000..605c3cd29 --- /dev/null +++ b/packages/emerald/src/components/EmPagination/EmPaginationItem.vue @@ -0,0 +1,68 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmPagination/EmPaginationLast.vue b/packages/emerald/src/components/EmPagination/EmPaginationLast.vue new file mode 100644 index 000000000..1d92b6e21 --- /dev/null +++ b/packages/emerald/src/components/EmPagination/EmPaginationLast.vue @@ -0,0 +1,54 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmPagination/EmPaginationNext.vue b/packages/emerald/src/components/EmPagination/EmPaginationNext.vue new file mode 100644 index 000000000..69fbeb240 --- /dev/null +++ b/packages/emerald/src/components/EmPagination/EmPaginationNext.vue @@ -0,0 +1,54 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmPagination/EmPaginationPrev.vue b/packages/emerald/src/components/EmPagination/EmPaginationPrev.vue new file mode 100644 index 000000000..2049313b3 --- /dev/null +++ b/packages/emerald/src/components/EmPagination/EmPaginationPrev.vue @@ -0,0 +1,54 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmPagination/index.ts b/packages/emerald/src/components/EmPagination/index.ts new file mode 100644 index 000000000..77cd549c8 --- /dev/null +++ b/packages/emerald/src/components/EmPagination/index.ts @@ -0,0 +1,20 @@ +export type { EmPaginationProps } from './EmPagination.vue' +export { default as EmPagination } from './EmPagination.vue' + +export type { EmPaginationEllipsisProps } from './EmPaginationEllipsis.vue' +export { default as EmPaginationEllipsis } from './EmPaginationEllipsis.vue' + +export type { EmPaginationFirstProps } from './EmPaginationFirst.vue' +export { default as EmPaginationFirst } from './EmPaginationFirst.vue' + +export type { EmPaginationItemProps } from './EmPaginationItem.vue' +export { default as EmPaginationItem } from './EmPaginationItem.vue' + +export type { EmPaginationLastProps } from './EmPaginationLast.vue' +export { default as EmPaginationLast } from './EmPaginationLast.vue' + +export type { EmPaginationNextProps } from './EmPaginationNext.vue' +export { default as EmPaginationNext } from './EmPaginationNext.vue' + +export type { EmPaginationPrevProps } from './EmPaginationPrev.vue' +export { default as EmPaginationPrev } from './EmPaginationPrev.vue' diff --git a/packages/emerald/src/components/EmProgress/EmProgress.vue b/packages/emerald/src/components/EmProgress/EmProgress.vue new file mode 100644 index 000000000..eb23df255 --- /dev/null +++ b/packages/emerald/src/components/EmProgress/EmProgress.vue @@ -0,0 +1,71 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmProgress/EmProgressFill.vue b/packages/emerald/src/components/EmProgress/EmProgressFill.vue new file mode 100644 index 000000000..70f8d7a8a --- /dev/null +++ b/packages/emerald/src/components/EmProgress/EmProgressFill.vue @@ -0,0 +1,52 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmProgress/EmProgressTrack.vue b/packages/emerald/src/components/EmProgress/EmProgressTrack.vue new file mode 100644 index 000000000..3bd74aa57 --- /dev/null +++ b/packages/emerald/src/components/EmProgress/EmProgressTrack.vue @@ -0,0 +1,34 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmProgress/EmProgressValue.vue b/packages/emerald/src/components/EmProgress/EmProgressValue.vue new file mode 100644 index 000000000..f5cd78abc --- /dev/null +++ b/packages/emerald/src/components/EmProgress/EmProgressValue.vue @@ -0,0 +1,36 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmProgress/index.ts b/packages/emerald/src/components/EmProgress/index.ts new file mode 100644 index 000000000..17ad0c52d --- /dev/null +++ b/packages/emerald/src/components/EmProgress/index.ts @@ -0,0 +1,11 @@ +export type { EmProgressProps, EmProgressSize } from './EmProgress.vue' +export { default as EmProgress } from './EmProgress.vue' + +export type { EmProgressFillProps } from './EmProgressFill.vue' +export { default as EmProgressFill } from './EmProgressFill.vue' + +export type { EmProgressTrackProps } from './EmProgressTrack.vue' +export { default as EmProgressTrack } from './EmProgressTrack.vue' + +export type { EmProgressValueProps } from './EmProgressValue.vue' +export { default as EmProgressValue } from './EmProgressValue.vue' diff --git a/packages/emerald/src/components/EmRadio/EmRadio.vue b/packages/emerald/src/components/EmRadio/EmRadio.vue new file mode 100644 index 000000000..53d9496cc --- /dev/null +++ b/packages/emerald/src/components/EmRadio/EmRadio.vue @@ -0,0 +1,96 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmRadio/EmRadioGroup.vue b/packages/emerald/src/components/EmRadio/EmRadioGroup.vue new file mode 100644 index 000000000..6dcbb8113 --- /dev/null +++ b/packages/emerald/src/components/EmRadio/EmRadioGroup.vue @@ -0,0 +1,47 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmRadio/EmRadioIndicator.vue b/packages/emerald/src/components/EmRadio/EmRadioIndicator.vue new file mode 100644 index 000000000..8cd07546c --- /dev/null +++ b/packages/emerald/src/components/EmRadio/EmRadioIndicator.vue @@ -0,0 +1,111 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmRadio/index.ts b/packages/emerald/src/components/EmRadio/index.ts new file mode 100644 index 000000000..63fa9e44f --- /dev/null +++ b/packages/emerald/src/components/EmRadio/index.ts @@ -0,0 +1,8 @@ +export type { EmRadioProps } from './EmRadio.vue' +export { default as EmRadio } from './EmRadio.vue' + +export type { EmRadioGroupProps } from './EmRadioGroup.vue' +export { default as EmRadioGroup } from './EmRadioGroup.vue' + +export type { EmRadioIndicatorProps } from './EmRadioIndicator.vue' +export { default as EmRadioIndicator } from './EmRadioIndicator.vue' diff --git a/packages/emerald/src/components/EmSelect/EmSelect.vue b/packages/emerald/src/components/EmSelect/EmSelect.vue new file mode 100644 index 000000000..c9f1c850f --- /dev/null +++ b/packages/emerald/src/components/EmSelect/EmSelect.vue @@ -0,0 +1,71 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSelect/EmSelectActivator.vue b/packages/emerald/src/components/EmSelect/EmSelectActivator.vue new file mode 100644 index 000000000..d4a144c65 --- /dev/null +++ b/packages/emerald/src/components/EmSelect/EmSelectActivator.vue @@ -0,0 +1,61 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSelect/EmSelectContent.vue b/packages/emerald/src/components/EmSelect/EmSelectContent.vue new file mode 100644 index 000000000..a46d4067f --- /dev/null +++ b/packages/emerald/src/components/EmSelect/EmSelectContent.vue @@ -0,0 +1,60 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSelect/EmSelectItem.vue b/packages/emerald/src/components/EmSelect/EmSelectItem.vue new file mode 100644 index 000000000..dd49cd4bd --- /dev/null +++ b/packages/emerald/src/components/EmSelect/EmSelectItem.vue @@ -0,0 +1,69 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSelect/EmSelectPlaceholder.vue b/packages/emerald/src/components/EmSelect/EmSelectPlaceholder.vue new file mode 100644 index 000000000..67c7ecfbb --- /dev/null +++ b/packages/emerald/src/components/EmSelect/EmSelectPlaceholder.vue @@ -0,0 +1,34 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSelect/EmSelectValue.vue b/packages/emerald/src/components/EmSelect/EmSelectValue.vue new file mode 100644 index 000000000..f721a1bac --- /dev/null +++ b/packages/emerald/src/components/EmSelect/EmSelectValue.vue @@ -0,0 +1,33 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSelect/index.ts b/packages/emerald/src/components/EmSelect/index.ts new file mode 100644 index 000000000..19e496a34 --- /dev/null +++ b/packages/emerald/src/components/EmSelect/index.ts @@ -0,0 +1,17 @@ +export type { EmSelectProps } from './EmSelect.vue' +export { default as EmSelect } from './EmSelect.vue' + +export type { EmSelectActivatorProps } from './EmSelectActivator.vue' +export { default as EmSelectActivator } from './EmSelectActivator.vue' + +export type { EmSelectContentProps } from './EmSelectContent.vue' +export { default as EmSelectContent } from './EmSelectContent.vue' + +export type { EmSelectItemProps } from './EmSelectItem.vue' +export { default as EmSelectItem } from './EmSelectItem.vue' + +export type { EmSelectPlaceholderProps } from './EmSelectPlaceholder.vue' +export { default as EmSelectPlaceholder } from './EmSelectPlaceholder.vue' + +export type { EmSelectValueProps } from './EmSelectValue.vue' +export { default as EmSelectValue } from './EmSelectValue.vue' diff --git a/packages/emerald/src/components/EmSlider/EmSlider.vue b/packages/emerald/src/components/EmSlider/EmSlider.vue new file mode 100644 index 000000000..1f0811e8f --- /dev/null +++ b/packages/emerald/src/components/EmSlider/EmSlider.vue @@ -0,0 +1,90 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSlider/EmSliderRange.vue b/packages/emerald/src/components/EmSlider/EmSliderRange.vue new file mode 100644 index 000000000..926519ffd --- /dev/null +++ b/packages/emerald/src/components/EmSlider/EmSliderRange.vue @@ -0,0 +1,42 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSlider/EmSliderThumb.vue b/packages/emerald/src/components/EmSlider/EmSliderThumb.vue new file mode 100644 index 000000000..f0daef033 --- /dev/null +++ b/packages/emerald/src/components/EmSlider/EmSliderThumb.vue @@ -0,0 +1,60 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSlider/EmSliderTrack.vue b/packages/emerald/src/components/EmSlider/EmSliderTrack.vue new file mode 100644 index 000000000..ff8647a05 --- /dev/null +++ b/packages/emerald/src/components/EmSlider/EmSliderTrack.vue @@ -0,0 +1,42 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSlider/index.ts b/packages/emerald/src/components/EmSlider/index.ts new file mode 100644 index 000000000..9f7b823d3 --- /dev/null +++ b/packages/emerald/src/components/EmSlider/index.ts @@ -0,0 +1,11 @@ +export type { EmSliderProps } from './EmSlider.vue' +export { default as EmSlider } from './EmSlider.vue' + +export type { EmSliderRangeProps } from './EmSliderRange.vue' +export { default as EmSliderRange } from './EmSliderRange.vue' + +export type { EmSliderThumbProps } from './EmSliderThumb.vue' +export { default as EmSliderThumb } from './EmSliderThumb.vue' + +export type { EmSliderTrackProps } from './EmSliderTrack.vue' +export { default as EmSliderTrack } from './EmSliderTrack.vue' diff --git a/packages/emerald/src/components/EmStepper/EmStepper.vue b/packages/emerald/src/components/EmStepper/EmStepper.vue new file mode 100644 index 000000000..6f11aaccf --- /dev/null +++ b/packages/emerald/src/components/EmStepper/EmStepper.vue @@ -0,0 +1,63 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmStepper/EmStepperItem.vue b/packages/emerald/src/components/EmStepper/EmStepperItem.vue new file mode 100644 index 000000000..cda4346e6 --- /dev/null +++ b/packages/emerald/src/components/EmStepper/EmStepperItem.vue @@ -0,0 +1,165 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmStepper/EmStepperLabel.vue b/packages/emerald/src/components/EmStepper/EmStepperLabel.vue new file mode 100644 index 000000000..b79fb4e3f --- /dev/null +++ b/packages/emerald/src/components/EmStepper/EmStepperLabel.vue @@ -0,0 +1,27 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmStepper/EmStepperLabelDescription.vue b/packages/emerald/src/components/EmStepper/EmStepperLabelDescription.vue new file mode 100644 index 000000000..130b05142 --- /dev/null +++ b/packages/emerald/src/components/EmStepper/EmStepperLabelDescription.vue @@ -0,0 +1,25 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmStepper/EmStepperSeparator.vue b/packages/emerald/src/components/EmStepper/EmStepperSeparator.vue new file mode 100644 index 000000000..4ba38369d --- /dev/null +++ b/packages/emerald/src/components/EmStepper/EmStepperSeparator.vue @@ -0,0 +1,30 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmStepper/index.ts b/packages/emerald/src/components/EmStepper/index.ts new file mode 100644 index 000000000..d903dbb9c --- /dev/null +++ b/packages/emerald/src/components/EmStepper/index.ts @@ -0,0 +1,14 @@ +export type { EmStepperProps } from './EmStepper.vue' +export { default as EmStepper } from './EmStepper.vue' + +export type { EmStepperItemProps } from './EmStepperItem.vue' +export { default as EmStepperItem } from './EmStepperItem.vue' + +export type { EmStepperLabelProps } from './EmStepperLabel.vue' +export { default as EmStepperLabel } from './EmStepperLabel.vue' + +export type { EmStepperLabelDescriptionProps } from './EmStepperLabelDescription.vue' +export { default as EmStepperLabelDescription } from './EmStepperLabelDescription.vue' + +export type { EmStepperSeparatorProps } from './EmStepperSeparator.vue' +export { default as EmStepperSeparator } from './EmStepperSeparator.vue' diff --git a/packages/emerald/src/components/EmSwitch/EmSwitch.vue b/packages/emerald/src/components/EmSwitch/EmSwitch.vue new file mode 100644 index 000000000..6357ea966 --- /dev/null +++ b/packages/emerald/src/components/EmSwitch/EmSwitch.vue @@ -0,0 +1,98 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSwitch/EmSwitchGroup.vue b/packages/emerald/src/components/EmSwitch/EmSwitchGroup.vue new file mode 100644 index 000000000..aac926d2c --- /dev/null +++ b/packages/emerald/src/components/EmSwitch/EmSwitchGroup.vue @@ -0,0 +1,47 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSwitch/EmSwitchThumb.vue b/packages/emerald/src/components/EmSwitch/EmSwitchThumb.vue new file mode 100644 index 000000000..fe3012704 --- /dev/null +++ b/packages/emerald/src/components/EmSwitch/EmSwitchThumb.vue @@ -0,0 +1,61 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSwitch/EmSwitchTrack.vue b/packages/emerald/src/components/EmSwitch/EmSwitchTrack.vue new file mode 100644 index 000000000..34cca051f --- /dev/null +++ b/packages/emerald/src/components/EmSwitch/EmSwitchTrack.vue @@ -0,0 +1,68 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmSwitch/index.ts b/packages/emerald/src/components/EmSwitch/index.ts new file mode 100644 index 000000000..685f9958e --- /dev/null +++ b/packages/emerald/src/components/EmSwitch/index.ts @@ -0,0 +1,11 @@ +export type { EmSwitchProps } from './EmSwitch.vue' +export { default as EmSwitch } from './EmSwitch.vue' + +export type { EmSwitchGroupProps } from './EmSwitchGroup.vue' +export { default as EmSwitchGroup } from './EmSwitchGroup.vue' + +export type { EmSwitchThumbProps } from './EmSwitchThumb.vue' +export { default as EmSwitchThumb } from './EmSwitchThumb.vue' + +export type { EmSwitchTrackProps } from './EmSwitchTrack.vue' +export { default as EmSwitchTrack } from './EmSwitchTrack.vue' diff --git a/packages/emerald/src/components/EmTable/EmTable.vue b/packages/emerald/src/components/EmTable/EmTable.vue new file mode 100644 index 000000000..97f61073b --- /dev/null +++ b/packages/emerald/src/components/EmTable/EmTable.vue @@ -0,0 +1,58 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTable/EmTableBody.vue b/packages/emerald/src/components/EmTable/EmTableBody.vue new file mode 100644 index 000000000..179017117 --- /dev/null +++ b/packages/emerald/src/components/EmTable/EmTableBody.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTable/EmTableCell.vue b/packages/emerald/src/components/EmTable/EmTableCell.vue new file mode 100644 index 000000000..8a73c4a15 --- /dev/null +++ b/packages/emerald/src/components/EmTable/EmTableCell.vue @@ -0,0 +1,45 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTable/EmTableHead.vue b/packages/emerald/src/components/EmTable/EmTableHead.vue new file mode 100644 index 000000000..8032635d5 --- /dev/null +++ b/packages/emerald/src/components/EmTable/EmTableHead.vue @@ -0,0 +1,29 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTable/EmTableHeader.vue b/packages/emerald/src/components/EmTable/EmTableHeader.vue new file mode 100644 index 000000000..6c037e6c6 --- /dev/null +++ b/packages/emerald/src/components/EmTable/EmTableHeader.vue @@ -0,0 +1,180 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTable/EmTableRow.vue b/packages/emerald/src/components/EmTable/EmTableRow.vue new file mode 100644 index 000000000..f7e2641fa --- /dev/null +++ b/packages/emerald/src/components/EmTable/EmTableRow.vue @@ -0,0 +1,34 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTable/index.ts b/packages/emerald/src/components/EmTable/index.ts new file mode 100644 index 000000000..b60150b0d --- /dev/null +++ b/packages/emerald/src/components/EmTable/index.ts @@ -0,0 +1,17 @@ +export type { EmTableProps } from './EmTable.vue' +export { default as EmTable } from './EmTable.vue' + +export type { EmTableBodyProps } from './EmTableBody.vue' +export { default as EmTableBody } from './EmTableBody.vue' + +export type { EmTableCellProps } from './EmTableCell.vue' +export { default as EmTableCell } from './EmTableCell.vue' + +export type { EmTableHeadProps } from './EmTableHead.vue' +export { default as EmTableHead } from './EmTableHead.vue' + +export type { EmTableHeaderProps } from './EmTableHeader.vue' +export { default as EmTableHeader } from './EmTableHeader.vue' + +export type { EmTableRowProps } from './EmTableRow.vue' +export { default as EmTableRow } from './EmTableRow.vue' diff --git a/packages/emerald/src/components/EmTabs/EmTabs.vue b/packages/emerald/src/components/EmTabs/EmTabs.vue new file mode 100644 index 000000000..ac1ec09a1 --- /dev/null +++ b/packages/emerald/src/components/EmTabs/EmTabs.vue @@ -0,0 +1,72 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTabs/EmTabsItem.vue b/packages/emerald/src/components/EmTabs/EmTabsItem.vue new file mode 100644 index 000000000..8b8bd6d29 --- /dev/null +++ b/packages/emerald/src/components/EmTabs/EmTabsItem.vue @@ -0,0 +1,84 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTabs/EmTabsList.vue b/packages/emerald/src/components/EmTabs/EmTabsList.vue new file mode 100644 index 000000000..9796ea267 --- /dev/null +++ b/packages/emerald/src/components/EmTabs/EmTabsList.vue @@ -0,0 +1,40 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTabs/EmTabsPanel.vue b/packages/emerald/src/components/EmTabs/EmTabsPanel.vue new file mode 100644 index 000000000..4cac823b5 --- /dev/null +++ b/packages/emerald/src/components/EmTabs/EmTabsPanel.vue @@ -0,0 +1,45 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTabs/index.ts b/packages/emerald/src/components/EmTabs/index.ts new file mode 100644 index 000000000..60c7103d5 --- /dev/null +++ b/packages/emerald/src/components/EmTabs/index.ts @@ -0,0 +1,11 @@ +export type { EmTabsProps } from './EmTabs.vue' +export { default as EmTabs } from './EmTabs.vue' + +export type { EmTabsItemProps } from './EmTabsItem.vue' +export { default as EmTabsItem } from './EmTabsItem.vue' + +export type { EmTabsListProps } from './EmTabsList.vue' +export { default as EmTabsList } from './EmTabsList.vue' + +export type { EmTabsPanelProps } from './EmTabsPanel.vue' +export { default as EmTabsPanel } from './EmTabsPanel.vue' diff --git a/packages/emerald/src/components/EmTag/EmTag.vue b/packages/emerald/src/components/EmTag/EmTag.vue new file mode 100644 index 000000000..663e84b83 --- /dev/null +++ b/packages/emerald/src/components/EmTag/EmTag.vue @@ -0,0 +1,230 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTag/index.ts b/packages/emerald/src/components/EmTag/index.ts new file mode 100644 index 000000000..844832ca8 --- /dev/null +++ b/packages/emerald/src/components/EmTag/index.ts @@ -0,0 +1,2 @@ +export { default as EmTag } from './EmTag.vue' +export type { EmTagProps } from './EmTag.vue' diff --git a/packages/emerald/src/components/EmTextField/EmTextField.vue b/packages/emerald/src/components/EmTextField/EmTextField.vue new file mode 100644 index 000000000..485140d6d --- /dev/null +++ b/packages/emerald/src/components/EmTextField/EmTextField.vue @@ -0,0 +1,92 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextField/EmTextFieldAppend.vue b/packages/emerald/src/components/EmTextField/EmTextFieldAppend.vue new file mode 100644 index 000000000..28030c865 --- /dev/null +++ b/packages/emerald/src/components/EmTextField/EmTextFieldAppend.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextField/EmTextFieldControl.vue b/packages/emerald/src/components/EmTextField/EmTextFieldControl.vue new file mode 100644 index 000000000..ec24abb8c --- /dev/null +++ b/packages/emerald/src/components/EmTextField/EmTextFieldControl.vue @@ -0,0 +1,114 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextField/EmTextFieldDescription.vue b/packages/emerald/src/components/EmTextField/EmTextFieldDescription.vue new file mode 100644 index 000000000..0d0e6bdcb --- /dev/null +++ b/packages/emerald/src/components/EmTextField/EmTextFieldDescription.vue @@ -0,0 +1,25 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextField/EmTextFieldError.vue b/packages/emerald/src/components/EmTextField/EmTextFieldError.vue new file mode 100644 index 000000000..24bdc3aa0 --- /dev/null +++ b/packages/emerald/src/components/EmTextField/EmTextFieldError.vue @@ -0,0 +1,28 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextField/EmTextFieldLabel.vue b/packages/emerald/src/components/EmTextField/EmTextFieldLabel.vue new file mode 100644 index 000000000..b7fe99b1d --- /dev/null +++ b/packages/emerald/src/components/EmTextField/EmTextFieldLabel.vue @@ -0,0 +1,33 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextField/EmTextFieldPrepend.vue b/packages/emerald/src/components/EmTextField/EmTextFieldPrepend.vue new file mode 100644 index 000000000..58bfeb072 --- /dev/null +++ b/packages/emerald/src/components/EmTextField/EmTextFieldPrepend.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextField/index.ts b/packages/emerald/src/components/EmTextField/index.ts new file mode 100644 index 000000000..753e85a62 --- /dev/null +++ b/packages/emerald/src/components/EmTextField/index.ts @@ -0,0 +1,20 @@ +export type { EmTextFieldProps } from './EmTextField.vue' +export { default as EmTextField } from './EmTextField.vue' + +export type { EmTextFieldAppendProps } from './EmTextFieldAppend.vue' +export { default as EmTextFieldAppend } from './EmTextFieldAppend.vue' + +export type { EmTextFieldControlProps } from './EmTextFieldControl.vue' +export { default as EmTextFieldControl } from './EmTextFieldControl.vue' + +export type { EmTextFieldDescriptionProps } from './EmTextFieldDescription.vue' +export { default as EmTextFieldDescription } from './EmTextFieldDescription.vue' + +export type { EmTextFieldErrorProps } from './EmTextFieldError.vue' +export { default as EmTextFieldError } from './EmTextFieldError.vue' + +export type { EmTextFieldLabelProps } from './EmTextFieldLabel.vue' +export { default as EmTextFieldLabel } from './EmTextFieldLabel.vue' + +export type { EmTextFieldPrependProps } from './EmTextFieldPrepend.vue' +export { default as EmTextFieldPrepend } from './EmTextFieldPrepend.vue' diff --git a/packages/emerald/src/components/EmTextarea/EmTextarea.vue b/packages/emerald/src/components/EmTextarea/EmTextarea.vue new file mode 100644 index 000000000..ae7c21133 --- /dev/null +++ b/packages/emerald/src/components/EmTextarea/EmTextarea.vue @@ -0,0 +1,86 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextarea/EmTextareaControl.vue b/packages/emerald/src/components/EmTextarea/EmTextareaControl.vue new file mode 100644 index 000000000..35a8ccadd --- /dev/null +++ b/packages/emerald/src/components/EmTextarea/EmTextareaControl.vue @@ -0,0 +1,102 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextarea/EmTextareaDescription.vue b/packages/emerald/src/components/EmTextarea/EmTextareaDescription.vue new file mode 100644 index 000000000..6b7134136 --- /dev/null +++ b/packages/emerald/src/components/EmTextarea/EmTextareaDescription.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextarea/EmTextareaError.vue b/packages/emerald/src/components/EmTextarea/EmTextareaError.vue new file mode 100644 index 000000000..4ad434d7c --- /dev/null +++ b/packages/emerald/src/components/EmTextarea/EmTextareaError.vue @@ -0,0 +1,28 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextarea/EmTextareaLabel.vue b/packages/emerald/src/components/EmTextarea/EmTextareaLabel.vue new file mode 100644 index 000000000..a53d776f6 --- /dev/null +++ b/packages/emerald/src/components/EmTextarea/EmTextareaLabel.vue @@ -0,0 +1,34 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTextarea/index.ts b/packages/emerald/src/components/EmTextarea/index.ts new file mode 100644 index 000000000..e71d4bd2c --- /dev/null +++ b/packages/emerald/src/components/EmTextarea/index.ts @@ -0,0 +1,14 @@ +export type { EmTextareaProps } from './EmTextarea.vue' +export { default as EmTextarea } from './EmTextarea.vue' + +export type { EmTextareaControlProps } from './EmTextareaControl.vue' +export { default as EmTextareaControl } from './EmTextareaControl.vue' + +export type { EmTextareaDescriptionProps } from './EmTextareaDescription.vue' +export { default as EmTextareaDescription } from './EmTextareaDescription.vue' + +export type { EmTextareaErrorProps } from './EmTextareaError.vue' +export { default as EmTextareaError } from './EmTextareaError.vue' + +export type { EmTextareaLabelProps } from './EmTextareaLabel.vue' +export { default as EmTextareaLabel } from './EmTextareaLabel.vue' diff --git a/packages/emerald/src/components/EmToast/EmToast.vue b/packages/emerald/src/components/EmToast/EmToast.vue new file mode 100644 index 000000000..0db5ef92b --- /dev/null +++ b/packages/emerald/src/components/EmToast/EmToast.vue @@ -0,0 +1,168 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmToast/EmToastBody.vue b/packages/emerald/src/components/EmToast/EmToastBody.vue new file mode 100644 index 000000000..8bfb9b60d --- /dev/null +++ b/packages/emerald/src/components/EmToast/EmToastBody.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmToast/EmToastClose.vue b/packages/emerald/src/components/EmToast/EmToastClose.vue new file mode 100644 index 000000000..ccdcf3c68 --- /dev/null +++ b/packages/emerald/src/components/EmToast/EmToastClose.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/packages/emerald/src/components/EmToast/EmToastDescription.vue b/packages/emerald/src/components/EmToast/EmToastDescription.vue new file mode 100644 index 000000000..2b5f1127e --- /dev/null +++ b/packages/emerald/src/components/EmToast/EmToastDescription.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmToast/EmToastIcon.vue b/packages/emerald/src/components/EmToast/EmToastIcon.vue new file mode 100644 index 000000000..a1d8b12e7 --- /dev/null +++ b/packages/emerald/src/components/EmToast/EmToastIcon.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmToast/EmToastTitle.vue b/packages/emerald/src/components/EmToast/EmToastTitle.vue new file mode 100644 index 000000000..107aa265c --- /dev/null +++ b/packages/emerald/src/components/EmToast/EmToastTitle.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/packages/emerald/src/components/EmToast/index.ts b/packages/emerald/src/components/EmToast/index.ts new file mode 100644 index 000000000..12042a4e4 --- /dev/null +++ b/packages/emerald/src/components/EmToast/index.ts @@ -0,0 +1,17 @@ +export type { EmToastProps, EmToastVariant } from './EmToast.vue' +export { default as EmToast } from './EmToast.vue' + +export type { EmToastBodyProps } from './EmToastBody.vue' +export { default as EmToastBody } from './EmToastBody.vue' + +export type { EmToastCloseProps } from './EmToastClose.vue' +export { default as EmToastClose } from './EmToastClose.vue' + +export type { EmToastDescriptionProps } from './EmToastDescription.vue' +export { default as EmToastDescription } from './EmToastDescription.vue' + +export type { EmToastIconProps } from './EmToastIcon.vue' +export { default as EmToastIcon } from './EmToastIcon.vue' + +export type { EmToastTitleProps } from './EmToastTitle.vue' +export { default as EmToastTitle } from './EmToastTitle.vue' diff --git a/packages/emerald/src/components/EmTooltip/EmTooltip.vue b/packages/emerald/src/components/EmTooltip/EmTooltip.vue new file mode 100644 index 000000000..606963478 --- /dev/null +++ b/packages/emerald/src/components/EmTooltip/EmTooltip.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/packages/emerald/src/components/EmTooltip/EmTooltipActivator.vue b/packages/emerald/src/components/EmTooltip/EmTooltipActivator.vue new file mode 100644 index 000000000..69d0bcd12 --- /dev/null +++ b/packages/emerald/src/components/EmTooltip/EmTooltipActivator.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/packages/emerald/src/components/EmTooltip/EmTooltipContent.vue b/packages/emerald/src/components/EmTooltip/EmTooltipContent.vue new file mode 100644 index 000000000..5c06b0276 --- /dev/null +++ b/packages/emerald/src/components/EmTooltip/EmTooltipContent.vue @@ -0,0 +1,141 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmTooltip/index.ts b/packages/emerald/src/components/EmTooltip/index.ts new file mode 100644 index 000000000..26e2d73fc --- /dev/null +++ b/packages/emerald/src/components/EmTooltip/index.ts @@ -0,0 +1,8 @@ +export type { EmTooltipProps } from './EmTooltip.vue' +export { default as EmTooltip } from './EmTooltip.vue' + +export type { EmTooltipActivatorProps } from './EmTooltipActivator.vue' +export { default as EmTooltipActivator } from './EmTooltipActivator.vue' + +export type { EmTooltipContentProps } from './EmTooltipContent.vue' +export { default as EmTooltipContent } from './EmTooltipContent.vue' diff --git a/packages/emerald/src/components/EmUpload/EmUpload.vue b/packages/emerald/src/components/EmUpload/EmUpload.vue new file mode 100644 index 000000000..825427235 --- /dev/null +++ b/packages/emerald/src/components/EmUpload/EmUpload.vue @@ -0,0 +1,57 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmUpload/EmUploadDropzone.vue b/packages/emerald/src/components/EmUpload/EmUploadDropzone.vue new file mode 100644 index 000000000..3878615a4 --- /dev/null +++ b/packages/emerald/src/components/EmUpload/EmUploadDropzone.vue @@ -0,0 +1,95 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmUpload/EmUploadInput.vue b/packages/emerald/src/components/EmUpload/EmUploadInput.vue new file mode 100644 index 000000000..431a6f54a --- /dev/null +++ b/packages/emerald/src/components/EmUpload/EmUploadInput.vue @@ -0,0 +1,48 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmUpload/EmUploadItem.vue b/packages/emerald/src/components/EmUpload/EmUploadItem.vue new file mode 100644 index 000000000..ee8375e52 --- /dev/null +++ b/packages/emerald/src/components/EmUpload/EmUploadItem.vue @@ -0,0 +1,38 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmUpload/EmUploadList.vue b/packages/emerald/src/components/EmUpload/EmUploadList.vue new file mode 100644 index 000000000..cbd026b18 --- /dev/null +++ b/packages/emerald/src/components/EmUpload/EmUploadList.vue @@ -0,0 +1,24 @@ + + + + + + + diff --git a/packages/emerald/src/components/EmUpload/index.ts b/packages/emerald/src/components/EmUpload/index.ts new file mode 100644 index 000000000..8540ac254 --- /dev/null +++ b/packages/emerald/src/components/EmUpload/index.ts @@ -0,0 +1,14 @@ +export type { EmUploadProps } from './EmUpload.vue' +export { default as EmUpload } from './EmUpload.vue' + +export type { EmUploadDropzoneProps } from './EmUploadDropzone.vue' +export { default as EmUploadDropzone } from './EmUploadDropzone.vue' + +export type { EmUploadInputProps } from './EmUploadInput.vue' +export { default as EmUploadInput } from './EmUploadInput.vue' + +export type { EmUploadItemProps } from './EmUploadItem.vue' +export { default as EmUploadItem } from './EmUploadItem.vue' + +export type { EmUploadListProps } from './EmUploadList.vue' +export { default as EmUploadList } from './EmUploadList.vue' diff --git a/packages/emerald/src/components/index.ts b/packages/emerald/src/components/index.ts new file mode 100644 index 000000000..f5f26bf83 --- /dev/null +++ b/packages/emerald/src/components/index.ts @@ -0,0 +1,35 @@ +export * from './EmAccordion' +export * from './EmAlert' +export * from './EmAutoComplete' +export * from './EmAvatar' +export * from './EmBadge' +export * from './EmBreadcrumb' +export * from './EmButton' +export * from './EmCard' +export * from './EmCarousel' +export * from './EmCheckbox' +export * from './EmContainer' +export * from './EmDatePicker' +export * from './EmDialog' +export * from './EmDivider' +export * from './EmFlex' +export * from './EmForm' +export * from './EmGrid' +export * from './EmList' +export * from './EmLoading' +export * from './EmMenu' +export * from './EmPagination' +export * from './EmProgress' +export * from './EmRadio' +export * from './EmSelect' +export * from './EmSlider' +export * from './EmStepper' +export * from './EmSwitch' +export * from './EmTable' +export * from './EmTabs' +export * from './EmTag' +export * from './EmTextarea' +export * from './EmTextField' +export * from './EmToast' +export * from './EmTooltip' +export * from './EmUpload' diff --git a/packages/emerald/src/index.ts b/packages/emerald/src/index.ts new file mode 100644 index 000000000..049366421 --- /dev/null +++ b/packages/emerald/src/index.ts @@ -0,0 +1,4 @@ +export * from './adapter' +export * from './components' +export * from './plugin' +export * from './theme' diff --git a/packages/emerald/src/plugin.ts b/packages/emerald/src/plugin.ts new file mode 100644 index 000000000..c51ccadd8 --- /dev/null +++ b/packages/emerald/src/plugin.ts @@ -0,0 +1,106 @@ +// Framework +import { + createHydrationPlugin, + createLocalePlugin, + createLoggerPlugin, + createStoragePlugin, + createThemePlugin, +} from '@vuetify/v0' + +// Adapters +import { EmeraldStyleSheetAdapter } from './adapter' +import { + error, + info, + neutral, + primary, + secondary, + success, + warning, +} from './theme' + +// Types +import type { + LocalePluginOptions, + LoggerPluginOptions, + StoragePluginOptions, + ThemePluginOptions, +} from '@vuetify/v0' +import type { App, Plugin } from 'vue' + +export interface EmeraldPluginOptions { + theme?: ThemePluginOptions | false + locale?: LocalePluginOptions | false + logger?: LoggerPluginOptions | false + storage?: StoragePluginOptions | false + hydration?: boolean +} + +type Scale = Record + +function scale (name: string, values: Scale): Scale { + const out: Scale = {} + for (const [key, val] of Object.entries(values)) { + out[key === 'DEFAULT' ? name : `${name}-${key}`] = val + } + return out +} + +export const emeraldColors: Record = { + ...scale('primary', primary), + ...scale('secondary', secondary), + ...scale('success', success), + ...scale('warning', warning), + ...scale('error', error), + ...scale('info', info), + ...scale('neutral', neutral), + 'background': '#FAF9FF', + 'surface': '#F5F4FF', + 'surface-tint': '#EBE9FE', + 'divider': '#DEE2E6', + 'on-primary': '#FFFFFF', + 'on-background': '#1A1C1E', + 'on-surface': '#1A1C1E', +} + +function emeraldThemeDefaults (): ThemePluginOptions { + return { + target: 'html', + default: 'emerald', + adapter: new EmeraldStyleSheetAdapter(), + themes: { + emerald: { colors: emeraldColors }, + }, + } +} + +export function createEmeraldPlugin (options: EmeraldPluginOptions = {}): Plugin { + return { + install (app: App) { + if (options.hydration !== false) { + app.use(createHydrationPlugin()) + } + + if (options.logger !== false) { + app.use(createLoggerPlugin(options.logger || {})) + } + + if (options.storage !== false) { + app.use(createStoragePlugin(options.storage || {})) + } + + if (options.locale !== false) { + app.use(createLocalePlugin(options.locale || { default: 'en' })) + } + + if (options.theme !== false) { + const defaults = emeraldThemeDefaults() + const theme = options.theme + ? { ...defaults, ...options.theme, themes: { ...defaults.themes, ...options.theme.themes } } + : defaults + + app.use(createThemePlugin(theme)) + } + }, + } +} diff --git a/packages/emerald/src/theme.ts b/packages/emerald/src/theme.ts new file mode 100644 index 000000000..74538e5fe --- /dev/null +++ b/packages/emerald/src/theme.ts @@ -0,0 +1,224 @@ +/** + * Emerald Design System — Token Definitions + * + * Extracted from Juan's Figma spec (March 2026). + * These tokens feed into UnoCSS theme config so that + * utility classes like `bg-primary`, `text-error-600`, `rounded-lg` + * resolve to Emerald's design language. + */ + +// ────────────────────────────────────────────── +// Brand +// ────────────────────────────────────────────── + +export const primary = { + 50: '#F5F3FF', + 100: '#EDE9FE', + 200: '#DED6FE', + 300: '#C4B5FD', + 400: '#A28BFA', + 500: '#7C5CF6', + 600: '#5F3AED', + 700: '#4D28D9', + 800: '#4021B6', + 900: '#361D95', + 950: '#221065', + DEFAULT: '#7C5CF6', +} as const + +export const secondary = { + 50: '#F4F7F9', + 100: '#ECF0F3', + 200: '#DCE4E9', + 300: '#C6D2DB', + 400: '#AEBCCB', + 500: '#94A3B8', + 600: '#828FA9', + 700: '#6F7A93', + 800: '#5C6677', + 900: '#4D5462', + 950: '#2D3139', + DEFAULT: '#94A3B8', +} as const + +// ────────────────────────────────────────────── +// Surfaces +// ────────────────────────────────────────────── + +export const background = { + DEFAULT: '#FAF9FF', + dark: '#1A1C1E', +} as const + +export const surface = { + DEFAULT: '#F5F4FF', + dark: '#1E1C28', +} as const + +// ────────────────────────────────────────────── +// Semantics +// ────────────────────────────────────────────── + +export const success = { + 50: '#F1FCF5', + 100: '#DFF9EB', + 200: '#C0F2D6', + 300: '#8EE7B7', + 400: '#56D290', + 500: '#2FB86F', + 600: '#219859', + 700: '#1E7A4A', + 800: '#1C5F3C', + 900: '#194E34', + 950: '#082B1B', + DEFAULT: '#1E7A4A', +} as const + +export const warning = { + 50: '#FBFAEB', + 100: '#F7F2CA', + 200: '#F1E497', + 300: '#E8D05C', + 400: '#E0B92F', + 500: '#D0A322', + 600: '#B07D1A', + 700: '#8F5D19', + 800: '#774A1C', + 900: '#663F1D', + 950: '#3B200D', + DEFAULT: '#B07D1A', +} as const + +export const error = { + 50: '#FDF4F3', + 100: '#FCE6E4', + 200: '#FAD2CE', + 300: '#F6B2AB', + 400: '#EF857A', + 500: '#E35E50', + 600: '#CF4233', + 700: '#C0392B', + 800: '#902E24', + 900: '#782C24', + 950: '#41130E', + DEFAULT: '#C0392B', +} as const + +export const info = { + 50: '#F3F6FC', + 100: '#E6EDF8', + 200: '#C7D9F0', + 300: '#96B8E3', + 400: '#5E93D2', + 500: '#3977BE', + 600: '#2A5FA5', + 700: '#224A82', + 800: '#20416C', + 900: '#1F375B', + 950: '#000000', + DEFAULT: '#2A5FA5', +} as const + +// ────────────────────────────────────────────── +// Border +// ────────────────────────────────────────────── + +export const border = { + DEFAULT: '#94A3B8', +} as const + +export const borderRadius = { + 'none': '0', + 'xs': '2px', + 'sm': '4px', + 'DEFAULT': '6px', + 'md': '8px', + 'lg': '12px', + 'xl': '16px', + '2xl': '24px', + 'full': '9999px', +} as const + +export const borderWidth = { + DEFAULT: '1px', + 0: '0', + 1: '1px', + 2: '2px', + 3: '3px', + 4: '4px', + 6: '6px', +} as const + +// ────────────────────────────────────────────── +// Shadows +// ────────────────────────────────────────────── + +export const shadow = { + xs: '0px 1px 2px 0px rgba(30, 28, 40, 0.05)', + sm: '0px 1px 3px 0px rgba(30, 28, 40, 0.10), 0px 1px 2px -1px rgba(30, 28, 40, 0.10)', + DEFAULT: '0px 4px 6px -1px rgba(30, 28, 40, 0.10), 0px 2px 4px -2px rgba(30, 28, 40, 0.10)', + md: '0px 4px 6px -1px rgba(30, 28, 40, 0.10), 0px 2px 4px -2px rgba(30, 28, 40, 0.10)', + lg: '0px 10px 15px -3px rgba(30, 28, 40, 0.10), 0px 4px 6px -4px rgba(30, 28, 40, 0.10)', + xl: '0px 20px 25px -5px rgba(30, 28, 40, 0.10), 0px 8px 10px -6px rgba(30, 28, 40, 0.10)', +} as const + +// ────────────────────────────────────────────── +// Typography +// ────────────────────────────────────────────── + +export const fontFamily = { + sans: 'Manrope, system-ui, -apple-system, sans-serif', +} as const + +export const fontSize = { + 'xs': ['12px', { lineHeight: '1.55', letterSpacing: '0.009em', fontWeight: '400' }], + 'sm': ['14px', { lineHeight: '1.55', fontWeight: '400' }], + 'md': ['16px', { lineHeight: '1.60', fontWeight: '400' }], + 'lg': ['20px', { lineHeight: '1.30', letterSpacing: '-0.01em', fontWeight: '600' }], + 'xl': ['28px', { lineHeight: '1.15', letterSpacing: '-0.015em', fontWeight: '600' }], + '2xl': ['40px', { lineHeight: '1.05', letterSpacing: '-0.05em', fontWeight: '700' }], +} as const + +// ────────────────────────────────────────────── +// Neutral (dark text/foreground) +// ────────────────────────────────────────────── + +export const neutral = { + DEFAULT: '#1A1C1E', + 50: '#FAF9FF', + 100: '#F5F4FF', + 200: '#ECF0F3', + 300: '#DEE2E6', + 400: '#94A3B8', + 500: '#4D5462', + 600: '#2D3139', + 700: '#1E1C28', + 800: '#1A1C1E', + 900: '#000000', +} as const + +// ────────────────────────────────────────────── +// Full theme export +// ────────────────────────────────────────────── + +export const emeraldTheme = { + colors: { + primary, + secondary, + success, + warning, + error, + info, + neutral, + background, + surface, + border, + black: '#000000', + white: '#FFFFFF', + }, + borderRadius, + borderWidth, + boxShadow: shadow, + fontFamily, + fontSize, +} as const diff --git a/packages/emerald/src/vite-env.d.ts b/packages/emerald/src/vite-env.d.ts new file mode 100644 index 000000000..99bbbfa0d --- /dev/null +++ b/packages/emerald/src/vite-env.d.ts @@ -0,0 +1,3 @@ +declare const __DEV__: boolean +declare const __VERSION__: string +declare const __VITE_LOGGER_ENABLED__: string diff --git a/packages/emerald/tsconfig.json b/packages/emerald/tsconfig.json new file mode 100644 index 000000000..912ec8c59 --- /dev/null +++ b/packages/emerald/tsconfig.json @@ -0,0 +1,38 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "noEmit": false, + "allowImportingTsExtensions": false, + "composite": true, + "incremental": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "customConditions": ["development"], + "paths": { + "#emerald/*": ["./src/*"], + "#emerald": ["./src"], + "#paper/*": ["../paper/src/*"], + "#paper": ["../paper/src"], + "#v0": ["../0/src"], + "#v0/*": ["../0/src/*"] + }, + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "assumeChangesOnlyAffectDirectDependencies": true, + "verbatimModuleSyntax": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "moduleResolution": "bundler", + "module": "esnext", + "target": "esnext", + "allowSyntheticDefaultImports": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"] +} diff --git a/packages/emerald/tsdown.config.mts b/packages/emerald/tsdown.config.mts new file mode 100644 index 000000000..d2f3564ca --- /dev/null +++ b/packages/emerald/tsdown.config.mts @@ -0,0 +1,36 @@ +import { fileURLToPath } from 'node:url' +import { defineConfig } from 'tsdown/config' +import Vue from 'unplugin-vue/rolldown' + +import pkg from './package.json' with { type: 'json' } + +const v0 = fileURLToPath(new URL('../0/src', import.meta.url)) +const paper = fileURLToPath(new URL('../paper/src', import.meta.url)) +const emerald = fileURLToPath(new URL('src', import.meta.url)) +const __VERSION__ = JSON.stringify(pkg.version) + +export default defineConfig({ + plugins: [ + Vue({ isProduction: true }), + ], + dts: { + vue: true, + }, + define: { + __DEV__: 'process.env.NODE_ENV !== \'production\'', + __VITE_LOGGER_ENABLED__: 'process.env.VITE_LOGGER_ENABLED', + __VUE_OPTIONS_API__: 'true', + __VUE_PROD_DEVTOOLS__: 'false', + __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false', + __VERSION__, + }, + name: 'paper/emerald', + exports: { + devExports: 'development', + }, + alias: { + '#v0': v0, + '#paper': paper, + '#emerald': emerald, + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a97f28389..c35ce4277 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,6 +30,9 @@ catalogs: '@octokit/openapi-types': specifier: ^27.0.0 version: 27.0.0 + '@phosphor-icons/vue': + specifier: ^2.2.1 + version: 2.2.1 '@resvg/resvg-js': specifier: ^2.6.2 version: 2.6.2 @@ -525,6 +528,12 @@ importers: dev: dependencies: + '@paper/emerald': + specifier: workspace:* + version: link:../packages/emerald + '@phosphor-icons/vue': + specifier: 'catalog:' + version: 2.2.1(vue@3.5.33(typescript@6.0.3)) '@vuetify/paper': specifier: workspace:* version: link:../packages/paper @@ -618,6 +627,28 @@ importers: specifier: 'catalog:' version: 0.5.1 + packages/emerald: + dependencies: + '@vuetify/paper': + specifier: workspace:* + version: link:../paper + '@vuetify/v0': + specifier: workspace:* + version: link:../0 + vue: + specifier: '>=3.3.0' + version: 3.5.33(typescript@6.0.3) + devDependencies: + tsdown: + specifier: 'catalog:' + version: 0.21.10(@tsdown/css@0.21.10)(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(synckit@0.11.12)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3)) + typescript: + specifier: 'catalog:' + version: 6.0.3 + unplugin-vue: + specifier: 'catalog:' + version: 7.2.0(@types/node@25.6.0)(esbuild@0.27.4)(jiti@2.6.1)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(vue@3.5.33(typescript@6.0.3))(yaml@2.8.3) + packages/paper: dependencies: '@vuetify/v0': @@ -2295,6 +2326,12 @@ packages: resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} + '@phosphor-icons/vue@2.2.1': + resolution: {integrity: sha512-3RNg1utc2Z5RwPKWFkW3eXI/0BfQAwXgtFxPUPeSzi55jGYUq16b+UqcgbKLazWFlwg5R92OCLKjDiJjeiJcnA==} + engines: {node: '>=14'} + peerDependencies: + vue: '>=3.2.39' + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -8681,6 +8718,10 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.6 optional: true + '@phosphor-icons/vue@2.2.1(vue@3.5.33(typescript@6.0.3))': + dependencies: + vue: 3.5.33(typescript@6.0.3) + '@pkgjs/parseargs@0.11.0': optional: true @@ -9949,7 +9990,7 @@ snapshots: domhandler: 5.0.3 htmlparser2: 10.1.0 picocolors: 1.1.1 - postcss: 8.5.8 + postcss: 8.5.14 postcss-media-query-parser: 0.2.3 optional: true @@ -13335,7 +13376,7 @@ snapshots: unhead@2.1.12: dependencies: - hookable: 6.1.0 + hookable: 6.1.1 unhead@2.1.13: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3b27b2284..e3e014988 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -14,6 +14,7 @@ catalog: '@mdi/js': npm:mdi-js-es@7.4.47 '@octokit/core': ^7.0.6 '@octokit/openapi-types': ^27.0.0 + '@phosphor-icons/vue': ^2.2.1 '@resvg/resvg-js': ^2.6.2 '@shikijs/langs': ^4.0.2 '@shikijs/markdown-it': ^4.0.2