Skip to content

Commit

Permalink
feat(types): Update registries for consuming TS/Glint apps/addons (#280)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
TSenter authored Nov 25, 2024
1 parent 20eb9f7 commit 7630e41
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 7 deletions.
6 changes: 6 additions & 0 deletions packages/ember-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down
2 changes: 1 addition & 1 deletion packages/ember-core/rollup.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
11 changes: 11 additions & 0 deletions packages/ember-core/src/service-registry.ts
Original file line number Diff line number Diff line change
@@ -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;
}
6 changes: 0 additions & 6 deletions packages/ember-core/src/template-registry.d.ts

This file was deleted.

100 changes: 100 additions & 0 deletions packages/ember-core/src/template-registry.ts
Original file line number Diff line number Diff line change
@@ -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 {}

0 comments on commit 7630e41

Please sign in to comment.