From cab785172eb720cc026f473f2ba4ec508b87246d Mon Sep 17 00:00:00 2001 From: Darko Gjorgjijoski Date: Sat, 4 Apr 2026 10:45:00 +0200 Subject: [PATCH] Add missing base components and global alias registrations Create BaseCustomTag (dynamic tag render), BaseFormatMoney, BaseHeading, BaseScrollPane, BaseDescriptionList/Item, BaseLabel, BaseCustomerSelectInput, BaseSpinner, BaseRating, and status label components. Register all renamed v2 components under their old Base* names (BaseInputGroup->FormGroup, BasePage->Page, BaseTable->DataTable, etc.) so templates resolve correctly. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../components/base/BaseCustomTag.vue | 16 ++ .../base/BaseCustomerSelectInput.vue | 104 +++++++++ .../components/base/BaseDescriptionList.vue | 5 + .../base/BaseDescriptionListItem.vue | 33 +++ .../base/BaseEstimateStatusLabel.vue | 44 ++++ .../components/base/BaseFormatMoney.vue | 27 +++ .../components/base/BaseHeading.vue | 22 ++ .../base/BaseInvoiceStatusLabel.vue | 51 +++++ .../scripts-v2/components/base/BaseLabel.vue | 5 + .../scripts-v2/components/base/BaseRating.vue | 204 ++++++++++++++++++ .../base/BaseRecurringInvoiceStatusLabel.vue | 35 +++ .../components/base/BaseScrollPane.vue | 11 + .../components/base/BaseSpinner.vue | 22 ++ resources/scripts-v2/components/base/index.ts | 12 ++ resources/scripts-v2/global-components.ts | 60 ++++++ 15 files changed, 651 insertions(+) create mode 100644 resources/scripts-v2/components/base/BaseCustomTag.vue create mode 100644 resources/scripts-v2/components/base/BaseCustomerSelectInput.vue create mode 100644 resources/scripts-v2/components/base/BaseDescriptionList.vue create mode 100644 resources/scripts-v2/components/base/BaseDescriptionListItem.vue create mode 100644 resources/scripts-v2/components/base/BaseEstimateStatusLabel.vue create mode 100644 resources/scripts-v2/components/base/BaseFormatMoney.vue create mode 100644 resources/scripts-v2/components/base/BaseHeading.vue create mode 100644 resources/scripts-v2/components/base/BaseInvoiceStatusLabel.vue create mode 100644 resources/scripts-v2/components/base/BaseLabel.vue create mode 100644 resources/scripts-v2/components/base/BaseRating.vue create mode 100644 resources/scripts-v2/components/base/BaseRecurringInvoiceStatusLabel.vue create mode 100644 resources/scripts-v2/components/base/BaseScrollPane.vue create mode 100644 resources/scripts-v2/components/base/BaseSpinner.vue diff --git a/resources/scripts-v2/components/base/BaseCustomTag.vue b/resources/scripts-v2/components/base/BaseCustomTag.vue new file mode 100644 index 00000000..e160a919 --- /dev/null +++ b/resources/scripts-v2/components/base/BaseCustomTag.vue @@ -0,0 +1,16 @@ + diff --git a/resources/scripts-v2/components/base/BaseCustomerSelectInput.vue b/resources/scripts-v2/components/base/BaseCustomerSelectInput.vue new file mode 100644 index 00000000..3fe2dc85 --- /dev/null +++ b/resources/scripts-v2/components/base/BaseCustomerSelectInput.vue @@ -0,0 +1,104 @@ + + + diff --git a/resources/scripts-v2/components/base/BaseDescriptionList.vue b/resources/scripts-v2/components/base/BaseDescriptionList.vue new file mode 100644 index 00000000..bae2f631 --- /dev/null +++ b/resources/scripts-v2/components/base/BaseDescriptionList.vue @@ -0,0 +1,5 @@ + diff --git a/resources/scripts-v2/components/base/BaseDescriptionListItem.vue b/resources/scripts-v2/components/base/BaseDescriptionListItem.vue new file mode 100644 index 00000000..2a2de0fe --- /dev/null +++ b/resources/scripts-v2/components/base/BaseDescriptionListItem.vue @@ -0,0 +1,33 @@ + + + diff --git a/resources/scripts-v2/components/base/BaseEstimateStatusLabel.vue b/resources/scripts-v2/components/base/BaseEstimateStatusLabel.vue new file mode 100644 index 00000000..90b97a77 --- /dev/null +++ b/resources/scripts-v2/components/base/BaseEstimateStatusLabel.vue @@ -0,0 +1,44 @@ + + + diff --git a/resources/scripts-v2/components/base/BaseFormatMoney.vue b/resources/scripts-v2/components/base/BaseFormatMoney.vue new file mode 100644 index 00000000..000bba35 --- /dev/null +++ b/resources/scripts-v2/components/base/BaseFormatMoney.vue @@ -0,0 +1,27 @@ + + + diff --git a/resources/scripts-v2/components/base/BaseHeading.vue b/resources/scripts-v2/components/base/BaseHeading.vue new file mode 100644 index 00000000..feb47254 --- /dev/null +++ b/resources/scripts-v2/components/base/BaseHeading.vue @@ -0,0 +1,22 @@ + + + diff --git a/resources/scripts-v2/components/base/BaseInvoiceStatusLabel.vue b/resources/scripts-v2/components/base/BaseInvoiceStatusLabel.vue new file mode 100644 index 00000000..ec839a72 --- /dev/null +++ b/resources/scripts-v2/components/base/BaseInvoiceStatusLabel.vue @@ -0,0 +1,51 @@ + + + diff --git a/resources/scripts-v2/components/base/BaseLabel.vue b/resources/scripts-v2/components/base/BaseLabel.vue new file mode 100644 index 00000000..2b5671d1 --- /dev/null +++ b/resources/scripts-v2/components/base/BaseLabel.vue @@ -0,0 +1,5 @@ + diff --git a/resources/scripts-v2/components/base/BaseRating.vue b/resources/scripts-v2/components/base/BaseRating.vue new file mode 100644 index 00000000..75c07537 --- /dev/null +++ b/resources/scripts-v2/components/base/BaseRating.vue @@ -0,0 +1,204 @@ + + + + + diff --git a/resources/scripts-v2/components/base/BaseRecurringInvoiceStatusLabel.vue b/resources/scripts-v2/components/base/BaseRecurringInvoiceStatusLabel.vue new file mode 100644 index 00000000..ba4942a8 --- /dev/null +++ b/resources/scripts-v2/components/base/BaseRecurringInvoiceStatusLabel.vue @@ -0,0 +1,35 @@ + + + diff --git a/resources/scripts-v2/components/base/BaseScrollPane.vue b/resources/scripts-v2/components/base/BaseScrollPane.vue new file mode 100644 index 00000000..45e14994 --- /dev/null +++ b/resources/scripts-v2/components/base/BaseScrollPane.vue @@ -0,0 +1,11 @@ + diff --git a/resources/scripts-v2/components/base/BaseSpinner.vue b/resources/scripts-v2/components/base/BaseSpinner.vue new file mode 100644 index 00000000..5ce2098f --- /dev/null +++ b/resources/scripts-v2/components/base/BaseSpinner.vue @@ -0,0 +1,22 @@ + diff --git a/resources/scripts-v2/components/base/index.ts b/resources/scripts-v2/components/base/index.ts index f7c050ed..6f1234ca 100644 --- a/resources/scripts-v2/components/base/index.ts +++ b/resources/scripts-v2/components/base/index.ts @@ -3,29 +3,41 @@ export { default as BaseButton } from './BaseButton.vue' export { default as BaseCard } from './BaseCard.vue' export { default as BaseCheckbox } from './BaseCheckbox.vue' export { default as BaseCustomerAddressDisplay } from './BaseCustomerAddressDisplay.vue' +export { default as BaseCustomerSelectInput } from './BaseCustomerSelectInput.vue' export { default as BaseCustomerSelectPopup } from './BaseCustomerSelectPopup.vue' export { default as BaseCustomInput } from './BaseCustomInput.vue' export { default as BaseDatePicker } from './BaseDatePicker.vue' +export { default as BaseDescriptionList } from './BaseDescriptionList.vue' +export { default as BaseDescriptionListItem } from './BaseDescriptionListItem.vue' export { default as BaseDialog } from './BaseDialog.vue' export { default as BaseDivider } from './BaseDivider.vue' export { default as BaseDropdown } from './BaseDropdown.vue' export { default as BaseDropdownItem } from './BaseDropdownItem.vue' export { default as BaseErrorAlert } from './BaseErrorAlert.vue' +export { default as BaseEstimateStatusLabel } from './BaseEstimateStatusLabel.vue' export { default as BaseFileUploader } from './BaseFileUploader.vue' +export { default as BaseFormatMoney } from './BaseFormatMoney.vue' export { default as BaseGlobalLoader } from './BaseGlobalLoader.vue' +export { default as BaseHeading } from './BaseHeading.vue' export { default as BaseIcon } from './BaseIcon.vue' export { default as BaseInfoAlert } from './BaseInfoAlert.vue' export { default as BaseInput } from './BaseInput.vue' +export { default as BaseInvoiceStatusLabel } from './BaseInvoiceStatusLabel.vue' export { default as BaseItemSelect } from './BaseItemSelect.vue' +export { default as BaseLabel } from './BaseLabel.vue' export { default as BaseList } from './BaseList.vue' export { default as BaseListItem } from './BaseListItem.vue' export { default as BaseMoney } from './BaseMoney.vue' export { default as BaseModal } from './BaseModal.vue' export { default as BaseMultiselect } from './BaseMultiselect.vue' export { default as BaseRadio } from './BaseRadio.vue' +export { default as BaseRating } from './BaseRating.vue' +export { default as BaseRecurringInvoiceStatusLabel } from './BaseRecurringInvoiceStatusLabel.vue' +export { default as BaseScrollPane } from './BaseScrollPane.vue' export { default as BaseSelectAction } from './BaseSelectAction.vue' export { default as BaseSelectInput } from './BaseSelectInput.vue' export { default as BaseSettingCard } from './BaseSettingCard.vue' +export { default as BaseSpinner } from './BaseSpinner.vue' export { default as BaseSwitch } from './BaseSwitch.vue' export { default as BaseTabGroup } from './BaseTabGroup.vue' export { default as BaseText } from './BaseText.vue' diff --git a/resources/scripts-v2/global-components.ts b/resources/scripts-v2/global-components.ts index 4d5f1800..23ee2d92 100644 --- a/resources/scripts-v2/global-components.ts +++ b/resources/scripts-v2/global-components.ts @@ -50,4 +50,64 @@ export function defineGlobalComponents(app: App): void { 'BaseEditor', defineAsyncComponent(() => import('./components/editor/RichEditor.vue')) ) + + // --------------------------------------------------------------------------- + // Alias registrations: map old Base* names to new v2 components so that + // templates using the legacy names continue to resolve correctly. + // --------------------------------------------------------------------------- + + // Form + const FormGroup = () => import('./components/form/FormGroup.vue') + const FormGrid = () => import('./components/form/FormGrid.vue') + const SwitchSection = () => import('./components/form/SwitchSection.vue') + + app.component('BaseInputGroup', defineAsyncComponent(FormGroup)) + app.component('BaseInputGrid', defineAsyncComponent(FormGrid)) + app.component('BaseSwitchSection', defineAsyncComponent(SwitchSection)) + + // Layout + const Page = () => import('./components/layout/Page.vue') + const PageHeader = () => import('./components/layout/PageHeader.vue') + const Breadcrumb = () => import('./components/layout/Breadcrumb.vue') + const BreadcrumbItem = () => import('./components/layout/BreadcrumbItem.vue') + const FilterWrapper = () => import('./components/layout/FilterWrapper.vue') + const EmptyPlaceholder = () => import('./components/layout/EmptyPlaceholder.vue') + const ContentPlaceholder = () => import('./components/layout/ContentPlaceholder.vue') + const ContentPlaceholderBox = () => import('./components/layout/ContentPlaceholderBox.vue') + const ContentPlaceholderText = () => import('./components/layout/ContentPlaceholderText.vue') + const ContentPlaceholderHeading = () => import('./components/layout/ContentPlaceholderHeading.vue') + app.component('BasePage', defineAsyncComponent(Page)) + app.component('BasePageHeader', defineAsyncComponent(PageHeader)) + app.component('BaseBreadcrumb', defineAsyncComponent(Breadcrumb)) + app.component('BaseBreadcrumbItem', defineAsyncComponent(BreadcrumbItem)) + app.component('BaseFilterWrapper', defineAsyncComponent(FilterWrapper)) + app.component('BaseEmptyPlaceholder', defineAsyncComponent(EmptyPlaceholder)) + app.component('BaseContentPlaceholders', defineAsyncComponent(ContentPlaceholder)) + app.component('BaseContentPlaceholdersBox', defineAsyncComponent(ContentPlaceholderBox)) + app.component('BaseContentPlaceholdersText', defineAsyncComponent(ContentPlaceholderText)) + app.component('BaseContentPlaceholdersHeading', defineAsyncComponent(ContentPlaceholderHeading)) + + // Table + const TablePagination = () => import('./components/table/TablePagination.vue') + + app.component('BaseTablePagination', defineAsyncComponent(TablePagination)) + + // Notifications + const NotificationRoot = () => import('./components/notifications/NotificationRoot.vue') + const NotificationItem = () => import('./components/notifications/NotificationItem.vue') + + app.component('NotificationRoot', defineAsyncComponent(NotificationRoot)) + app.component('NotificationItem', defineAsyncComponent(NotificationItem)) + + // Status badge aliases (map old Base* prefix names to the already eager-loaded + // components from ./components/base/*.vue) + const invoiceStatusBadge = components['./components/base/InvoiceStatusBadge.vue'] + const estimateStatusBadge = components['./components/base/EstimateStatusBadge.vue'] + const paidStatusBadge = components['./components/base/PaidStatusBadge.vue'] + const recurringInvoiceStatusBadge = components['./components/base/RecurringInvoiceStatusBadge.vue'] + + if (invoiceStatusBadge) app.component('BaseInvoiceStatusBadge', invoiceStatusBadge.default) + if (estimateStatusBadge) app.component('BaseEstimateStatusBadge', estimateStatusBadge.default) + if (paidStatusBadge) app.component('BasePaidStatusBadge', paidStatusBadge.default) + if (recurringInvoiceStatusBadge) app.component('BaseRecurringInvoiceStatusBadge', recurringInvoiceStatusBadge.default) }