From 7630e415b9a905c1ebc6b4e3ba030e7d4e4e0c37 Mon Sep 17 00:00:00 2001 From: Tyler Senter Date: Mon, 25 Nov 2024 14:11:51 -0500 Subject: [PATCH] feat(types): Update registries for consuming TS/Glint apps/addons (#280) * chore: Rename template registry * feat(types): Update component registry * feat(types): Add helper registry * feat(types): Add modifier registry * feat(types): Add template registry export * feat(types): Add service registry --- packages/ember-core/package.json | 6 ++ packages/ember-core/rollup.config.mjs | 2 +- packages/ember-core/src/service-registry.ts | 11 ++ .../ember-core/src/template-registry.d.ts | 6 -- packages/ember-core/src/template-registry.ts | 100 ++++++++++++++++++ 5 files changed, 118 insertions(+), 7 deletions(-) create mode 100644 packages/ember-core/src/service-registry.ts delete mode 100644 packages/ember-core/src/template-registry.d.ts create mode 100644 packages/ember-core/src/template-registry.ts diff --git a/packages/ember-core/package.json b/packages/ember-core/package.json index a68f27f27..7e5e4c34e 100644 --- a/packages/ember-core/package.json +++ b/packages/ember-core/package.json @@ -45,6 +45,12 @@ "./validation": { "types": "./declarations/validation/index.d.ts", "default": "./dist/validation/index.js" + }, + "./template-registry": { + "types": "./declarations/template-registry.d.ts" + }, + "./service-registry": { + "types": "./declarations/service-registry.d.ts" } }, "typesVersions": { diff --git a/packages/ember-core/rollup.config.mjs b/packages/ember-core/rollup.config.mjs index 3009aa995..5bc1ca9a5 100644 --- a/packages/ember-core/rollup.config.mjs +++ b/packages/ember-core/rollup.config.mjs @@ -20,7 +20,7 @@ export default { // up your addon's public API. Also make sure your package.json#exports // is aligned to the config here. // See https://github.com/embroider-build/embroider/blob/main/docs/v2-faq.md#how-can-i-define-the-public-exports-of-my-addon - addon.publicEntrypoints(['**/*.js', 'index.js', 'template-registry.js']), + addon.publicEntrypoints(['**/*.js', 'index.js', 'template-registry.js', 'service-registry.js']), // These are the modules that should get reexported into the traditional // "app" tree. Things in here should also be in publicEntrypoints above, but diff --git a/packages/ember-core/src/service-registry.ts b/packages/ember-core/src/service-registry.ts new file mode 100644 index 000000000..8a5d11e65 --- /dev/null +++ b/packages/ember-core/src/service-registry.ts @@ -0,0 +1,11 @@ +import ModalService from './services/modal.ts'; +import ResponsiveService from './services/responsive.ts'; +import ThemeService from './services/theme.ts'; +import ToastService from './services/toast.ts'; + +export default interface ServiceRegistry { + modal: ModalService; + responsive: ResponsiveService; + theme: ThemeService; + toast: ToastService; +} diff --git a/packages/ember-core/src/template-registry.d.ts b/packages/ember-core/src/template-registry.d.ts deleted file mode 100644 index d5674f20a..000000000 --- a/packages/ember-core/src/template-registry.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Button } from '@nrg-ui/core'; - -export default interface Registry { - Button: typeof Button; - button: typeof Button; -} diff --git a/packages/ember-core/src/template-registry.ts b/packages/ember-core/src/template-registry.ts new file mode 100644 index 000000000..e8ff967f3 --- /dev/null +++ b/packages/ember-core/src/template-registry.ts @@ -0,0 +1,100 @@ +import Alert from './components/alert.gts'; +import ButtonGroup from './components/button-group.gts'; +import Button from './components/button.gts'; +import Card from './components/card.gts'; +import Footer from './components/footer.gts'; +import BoundValue from './components/form/bound-value.ts'; +import CheckboxGroup from './components/form/checkbox-group.gts'; +import Checkbox from './components/form/checkbox.gts'; +import Datetime from './components/form/datetime.gts'; +import Field from './components/form/field.gts'; +import Form from './components/form/index.gts'; +import NumberInput from './components/form/number-input.gts'; +import PhoneInput from './components/form/phone-input.gts'; +import RadioGroup from './components/form/radio-group.gts'; +import Select from './components/form/select.gts'; +import TextArea from './components/form/text-area.gts'; +import TextInput from './components/form/text-input.gts'; +import Header from './components/header.gts'; +import Icon from './components/icon.gts'; +import LoadingIndicator from './components/loading-indicator.gts'; +import MktgCardContainer from './components/mktg/card-container.gts'; +import MktgCard from './components/mktg/card.gts'; +import MktgFaq from './components/mktg/faq.gts'; +import MktgFeatureList from './components/mktg/feature-list.gts'; +import MktgFooter from './components/mktg/footer.gts'; +import MktgHeader from './components/mktg/header.gts'; +import MktgNavbar from './components/mktg/navbar.gts'; +import MktgPromoContainer from './components/mktg/promo-container.gts'; +import MktgPromo from './components/mktg/promo.gts'; +import MktgSectionHeader from './components/mktg/section-header.gts'; +import MktgServicePricing from './components/mktg/service-pricing.gts'; +import MktgWorkflowTray from './components/mktg/workflow-tray.gts'; +import Modal from './components/modal.gts'; +import NavItem from './components/nav-item.gts'; +import PageNotFound from './components/page-not-found.gts'; +import Progress from './components/progress.gts'; +import ThemeSwitcher from './components/theme-switcher.gts'; +import Toaster from './components/toaster.gts'; +import Bind from './helpers/bind.ts'; +import DidInsert from './modifiers/did-insert.ts'; +import OnClickOutside from './modifiers/on-click-outside.ts'; +import OnUpdate from './modifiers/on-update.ts'; + +export interface ComponentRegistry { + // Core components + Alert: typeof Alert; + ButtonGroup: typeof ButtonGroup; + Button: typeof Button; + Card: typeof Card; + Footer: typeof Footer; + Header: typeof Header; + Icon: typeof Icon; + LoadingIndicator: typeof LoadingIndicator; + Modal: typeof Modal; + NavItem: typeof NavItem; + PageNotFound: typeof PageNotFound; + Progress: typeof Progress; + ThemeSwitcher: typeof ThemeSwitcher; + Toaster: typeof Toaster; + + // Form components + Form: typeof Form; + 'Form::BoundValue': typeof BoundValue; + 'Form::CheckboxGroup': typeof CheckboxGroup; + 'Form::Checkbox': typeof Checkbox; + 'Form::Datetime': typeof Datetime; + 'Form::Field': typeof Field; + 'Form::NumberInput': typeof NumberInput; + 'Form::PhoneInput': typeof PhoneInput; + 'Form::RadioGroup': typeof RadioGroup; + 'Form::Select': typeof Select; + 'Form::TextArea': typeof TextArea; + 'Form::TextInput': typeof TextInput; + + // Marketing components + 'Mktg::CardContainer': typeof MktgCardContainer; + 'Mktg::Card': typeof MktgCard; + 'Mktg::Faq': typeof MktgFaq; + 'Mktg::FeatureList': typeof MktgFeatureList; + 'Mktg::Footer': typeof MktgFooter; + 'Mktg::Header': typeof MktgHeader; + 'Mktg::Navbar': typeof MktgNavbar; + 'Mktg::PromoContainer': typeof MktgPromoContainer; + 'Mktg::Promo': typeof MktgPromo; + 'Mktg::SectionHeader': typeof MktgSectionHeader; + 'Mktg::ServicePricing': typeof MktgServicePricing; + 'Mktg::WorkflowTray': typeof MktgWorkflowTray; +} + +export interface HelperRegistry { + bind: typeof Bind; +} + +export interface ModifierRegistry { + 'did-insert': typeof DidInsert; + 'on-click-outside': typeof OnClickOutside; + 'on-update': typeof OnUpdate; +} + +export default interface TemplateRegistry extends ComponentRegistry, HelperRegistry, ModifierRegistry {}