├── .editorconfig
├── .githooks
├── commit-msg
├── pre-commit
└── pre-push
├── .github
├── ISSUE_TEMPLATE
│ ├── 01-bug-report.yml
│ └── 02-feature-request.yml
├── PULL_REQUEST_TEMPLATE.md
└── workflows
│ ├── chromatic.yml
│ ├── ci.yml
│ └── nightly-release.yml
├── .gitignore
├── .node-version
├── .prettierignore
├── .prettierrc.mjs
├── .verdaccio
└── config.yml
├── .vscode
├── extensions.json
└── settings.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── apps
├── .gitkeep
├── app
│ ├── drizzle.config.ts
│ ├── drizzle
│ │ ├── 0000_melted_weapon_omega.sql
│ │ └── meta
│ │ │ ├── 0000_snapshot.json
│ │ │ └── _journal.json
│ ├── eslint.config.cjs
│ ├── index.html
│ ├── nitro.config.ts
│ ├── package.json
│ ├── postcss.config.cjs
│ ├── project.json
│ ├── src
│ │ ├── app.config.server.ts
│ │ ├── app.config.ts
│ │ ├── app
│ │ │ ├── app.component.spec.ts
│ │ │ ├── app.component.ts
│ │ │ ├── core
│ │ │ │ ├── models
│ │ │ │ │ └── ui-docs.model.ts
│ │ │ │ └── services
│ │ │ │ │ └── api-docs.service.ts
│ │ │ ├── pages
│ │ │ │ ├── (components)
│ │ │ │ │ ├── components.page.ts
│ │ │ │ │ ├── components.server.ts
│ │ │ │ │ └── components
│ │ │ │ │ │ ├── (accordion)
│ │ │ │ │ │ ├── accordion--multiple-opened.example.ts
│ │ │ │ │ │ ├── accordion.page.ts
│ │ │ │ │ │ └── accordion.preview.ts
│ │ │ │ │ │ ├── (alert)
│ │ │ │ │ │ ├── alert--destructive.example.ts
│ │ │ │ │ │ ├── alert.page.ts
│ │ │ │ │ │ └── alert.preview.ts
│ │ │ │ │ │ ├── (alert-dialog)
│ │ │ │ │ │ ├── alert-dialog.page.ts
│ │ │ │ │ │ └── alert-dialog.preview.ts
│ │ │ │ │ │ ├── (aspect-ratio)
│ │ │ │ │ │ ├── aspect-ratio.page.ts
│ │ │ │ │ │ └── aspect-ratio.preview.ts
│ │ │ │ │ │ ├── (avatar)
│ │ │ │ │ │ ├── avatar.page.ts
│ │ │ │ │ │ └── avatar.preview.ts
│ │ │ │ │ │ ├── (badge)
│ │ │ │ │ │ ├── badge--destructive.example.ts
│ │ │ │ │ │ ├── badge--outline.example.ts
│ │ │ │ │ │ ├── badge--secondary.example.ts
│ │ │ │ │ │ ├── badge.page.ts
│ │ │ │ │ │ └── badge.preview.ts
│ │ │ │ │ │ ├── (breadcrumb)
│ │ │ │ │ │ ├── breadcrumb--collapsed.example.ts
│ │ │ │ │ │ ├── breadcrumb--custom-separator.example.ts
│ │ │ │ │ │ ├── breadcrumb--dropdown.example.ts
│ │ │ │ │ │ ├── breadcrumb.page.ts
│ │ │ │ │ │ └── breadcrumb.preview.ts
│ │ │ │ │ │ ├── (button)
│ │ │ │ │ │ ├── button--anchor.example.ts
│ │ │ │ │ │ ├── button--destructive.example.ts
│ │ │ │ │ │ ├── button--ghost.example.ts
│ │ │ │ │ │ ├── button--icon.example.ts
│ │ │ │ │ │ ├── button--link.example.ts
│ │ │ │ │ │ ├── button--loading.example.ts
│ │ │ │ │ │ ├── button--outline.example.ts
│ │ │ │ │ │ ├── button--secondary.example.ts
│ │ │ │ │ │ ├── button--with-icon.example.ts
│ │ │ │ │ │ ├── button.page.ts
│ │ │ │ │ │ └── button.preview.ts
│ │ │ │ │ │ ├── (calendar)
│ │ │ │ │ │ ├── calendar--multiple.example.ts
│ │ │ │ │ │ ├── calendar.page.ts
│ │ │ │ │ │ └── calendar.preview.ts
│ │ │ │ │ │ ├── (card)
│ │ │ │ │ │ ├── card--notifications.example.ts
│ │ │ │ │ │ ├── card.page.ts
│ │ │ │ │ │ └── card.preview.ts
│ │ │ │ │ │ ├── (carousel)
│ │ │ │ │ │ ├── carousel--orientation.example.ts
│ │ │ │ │ │ ├── carousel--plugins.example.ts
│ │ │ │ │ │ ├── carousel--sizes.example.ts
│ │ │ │ │ │ ├── carousel--slide-count.example.ts
│ │ │ │ │ │ ├── carousel--spacing.example.ts
│ │ │ │ │ │ ├── carousel.page.ts
│ │ │ │ │ │ └── carousel.preview.ts
│ │ │ │ │ │ ├── (checkbox)
│ │ │ │ │ │ ├── checkbox.page.ts
│ │ │ │ │ │ └── checkbox.preview.ts
│ │ │ │ │ │ ├── (collapsible)
│ │ │ │ │ │ ├── collapsible.page.ts
│ │ │ │ │ │ └── collapsible.preview.ts
│ │ │ │ │ │ ├── (combobox)
│ │ │ │ │ │ ├── combobox.page.ts
│ │ │ │ │ │ └── combobox.preview.ts
│ │ │ │ │ │ ├── (command)
│ │ │ │ │ │ ├── command--dialog.example.ts
│ │ │ │ │ │ ├── command.page.ts
│ │ │ │ │ │ └── command.preview.ts
│ │ │ │ │ │ ├── (context-menu)
│ │ │ │ │ │ ├── context-menu-with-state.preview.ts
│ │ │ │ │ │ ├── context-menu.page.ts
│ │ │ │ │ │ └── context-menu.preview.ts
│ │ │ │ │ │ ├── (data-table)
│ │ │ │ │ │ ├── data-table.page.ts
│ │ │ │ │ │ └── data-table.preview.ts
│ │ │ │ │ │ ├── (date-picker)
│ │ │ │ │ │ ├── date-picker--config.example.ts
│ │ │ │ │ │ ├── date-picker--form-multi.example.ts
│ │ │ │ │ │ ├── date-picker--form.example.ts
│ │ │ │ │ │ ├── date-picker--format.example.ts
│ │ │ │ │ │ ├── date-picker--multi.example.ts
│ │ │ │ │ │ ├── date-picker.page.ts
│ │ │ │ │ │ └── date-picker.preview.ts
│ │ │ │ │ │ ├── (dialog)
│ │ │ │ │ │ ├── dialog-close.preview.ts
│ │ │ │ │ │ ├── dialog-context-menu.preview.ts
│ │ │ │ │ │ ├── dialog-declarative.preview.ts
│ │ │ │ │ │ ├── dialog-dynamic-component.preview.ts
│ │ │ │ │ │ ├── dialog.page.ts
│ │ │ │ │ │ └── dialog.preview.ts
│ │ │ │ │ │ ├── (dropdown-menu)
│ │ │ │ │ │ ├── dropdown-menu.page.ts
│ │ │ │ │ │ ├── dropdown-menu.preview.ts
│ │ │ │ │ │ ├── dropdown-with-context.preview.ts
│ │ │ │ │ │ └── dropdown-with-state.preview.ts
│ │ │ │ │ │ ├── (form-field)
│ │ │ │ │ │ ├── form-field--error.preview.ts
│ │ │ │ │ │ ├── form-field--with-form-dirty.preview.ts
│ │ │ │ │ │ ├── form-field--with-form.preview.ts
│ │ │ │ │ │ ├── form-field.page.ts
│ │ │ │ │ │ └── form-field.preview.ts
│ │ │ │ │ │ ├── (hover-card)
│ │ │ │ │ │ ├── hover-card.page.ts
│ │ │ │ │ │ └── hover-card.preview.ts
│ │ │ │ │ │ ├── (icon)
│ │ │ │ │ │ ├── icon.page.ts
│ │ │ │ │ │ └── icon.preview.ts
│ │ │ │ │ │ ├── (input)
│ │ │ │ │ │ ├── input--button.preview.ts
│ │ │ │ │ │ ├── input--disabled.preview.ts
│ │ │ │ │ │ ├── input--file.preview.ts
│ │ │ │ │ │ ├── input--label.preview.ts
│ │ │ │ │ │ ├── input.page.ts
│ │ │ │ │ │ └── input.preview.ts
│ │ │ │ │ │ ├── (input-otp)
│ │ │ │ │ │ ├── input-otp--form.example.ts
│ │ │ │ │ │ ├── input-otp.page.ts
│ │ │ │ │ │ └── input-otp.preview.ts
│ │ │ │ │ │ ├── (label)
│ │ │ │ │ │ ├── label.page.ts
│ │ │ │ │ │ └── label.preview.ts
│ │ │ │ │ │ ├── (menubar)
│ │ │ │ │ │ ├── menubar.page.ts
│ │ │ │ │ │ └── menubar.preview.ts
│ │ │ │ │ │ ├── (pagination)
│ │ │ │ │ │ ├── pagination--advanced.example.ts
│ │ │ │ │ │ ├── pagination--icon-only.example.ts
│ │ │ │ │ │ ├── pagination--query-params.example.ts
│ │ │ │ │ │ ├── pagination.page.ts
│ │ │ │ │ │ └── pagination.preview.ts
│ │ │ │ │ │ ├── (popover)
│ │ │ │ │ │ ├── popover.page.ts
│ │ │ │ │ │ └── popover.preview.ts
│ │ │ │ │ │ ├── (progress)
│ │ │ │ │ │ ├── progress--indeterminate.preview.ts
│ │ │ │ │ │ ├── progress.page.ts
│ │ │ │ │ │ └── progress.preview.ts
│ │ │ │ │ │ ├── (radio-group)
│ │ │ │ │ │ ├── radio-group--card.example.ts
│ │ │ │ │ │ ├── radio-group.page.ts
│ │ │ │ │ │ └── radio-group.preview.ts
│ │ │ │ │ │ ├── (scroll-area)
│ │ │ │ │ │ ├── scroll-area.page.ts
│ │ │ │ │ │ └── scroll-area.preview.ts
│ │ │ │ │ │ ├── (select)
│ │ │ │ │ │ ├── select--multiple.preview.ts
│ │ │ │ │ │ ├── select--scrollable.preview.ts
│ │ │ │ │ │ ├── select--value-template.preview.ts
│ │ │ │ │ │ ├── select.page.ts
│ │ │ │ │ │ └── select.preview.ts
│ │ │ │ │ │ ├── (separator)
│ │ │ │ │ │ ├── separator.page.ts
│ │ │ │ │ │ └── separator.preview.ts
│ │ │ │ │ │ ├── (sheet)
│ │ │ │ │ │ ├── sheet--side.preview.ts
│ │ │ │ │ │ ├── sheet-close.preview.ts
│ │ │ │ │ │ ├── sheet.page.ts
│ │ │ │ │ │ └── sheet.preview.ts
│ │ │ │ │ │ ├── (skeleton)
│ │ │ │ │ │ ├── skeleton.page.ts
│ │ │ │ │ │ └── skeleton.preview.ts
│ │ │ │ │ │ ├── (slider)
│ │ │ │ │ │ ├── slider.page.ts
│ │ │ │ │ │ └── slider.preview.ts
│ │ │ │ │ │ ├── (sonner)
│ │ │ │ │ │ ├── sonner.page.ts
│ │ │ │ │ │ └── sonner.preview.ts
│ │ │ │ │ │ ├── (spinner)
│ │ │ │ │ │ ├── spinner.page.ts
│ │ │ │ │ │ └── spinner.preview.ts
│ │ │ │ │ │ ├── (switch)
│ │ │ │ │ │ ├── switch.page.ts
│ │ │ │ │ │ └── switch.preview.ts
│ │ │ │ │ │ ├── (table)
│ │ │ │ │ │ ├── table.page.ts
│ │ │ │ │ │ └── table.preview.ts
│ │ │ │ │ │ ├── (tabs)
│ │ │ │ │ │ ├── tabs--paginated.preview.ts
│ │ │ │ │ │ ├── tabs--vertical.preview.ts
│ │ │ │ │ │ ├── tabs.page.ts
│ │ │ │ │ │ └── tabs.preview.ts
│ │ │ │ │ │ ├── (textarea)
│ │ │ │ │ │ ├── textarea.page.ts
│ │ │ │ │ │ └── textarea.preview.ts
│ │ │ │ │ │ ├── (toggle)
│ │ │ │ │ │ ├── toggle--disabled.preview.ts
│ │ │ │ │ │ ├── toggle--large.preview.ts
│ │ │ │ │ │ ├── toggle--outline.preview.ts
│ │ │ │ │ │ ├── toggle--small.preview.ts
│ │ │ │ │ │ ├── toggle--with-text.preview.ts
│ │ │ │ │ │ ├── toggle.page.ts
│ │ │ │ │ │ └── toggle.preview.ts
│ │ │ │ │ │ ├── (toggle-group)
│ │ │ │ │ │ ├── toggle-group--disabled.preview.ts
│ │ │ │ │ │ ├── toggle-group--large.preview.ts
│ │ │ │ │ │ ├── toggle-group--outline.preview.ts
│ │ │ │ │ │ ├── toggle-group--small.preview.ts
│ │ │ │ │ │ ├── toggle-group.page.ts
│ │ │ │ │ │ └── toggle-group.preview.ts
│ │ │ │ │ │ ├── (tooltip)
│ │ │ │ │ │ ├── tooltip--simple.example.ts
│ │ │ │ │ │ ├── tooltip.page.ts
│ │ │ │ │ │ └── tooltip.preview.ts
│ │ │ │ │ │ ├── [...not-found].page.ts
│ │ │ │ │ │ ├── index.page.ts
│ │ │ │ │ │ └── installation-cs.component.ts
│ │ │ │ ├── (documentation)
│ │ │ │ │ ├── documentation.page.ts
│ │ │ │ │ └── documentation
│ │ │ │ │ │ ├── (ui)
│ │ │ │ │ │ ├── (typography)
│ │ │ │ │ │ │ ├── typography.page.ts
│ │ │ │ │ │ │ └── typography.preview.ts
│ │ │ │ │ │ ├── dark-mode.page.ts
│ │ │ │ │ │ ├── figma.page.ts
│ │ │ │ │ │ ├── health-checks.page.ts
│ │ │ │ │ │ ├── installation.page.ts
│ │ │ │ │ │ ├── theming.page.ts
│ │ │ │ │ │ └── update-guide.page.ts
│ │ │ │ │ │ ├── [...not-found].page.ts
│ │ │ │ │ │ ├── about.page.ts
│ │ │ │ │ │ ├── changelog.page.ts
│ │ │ │ │ │ ├── cli.page.ts
│ │ │ │ │ │ ├── components-json.page.ts
│ │ │ │ │ │ ├── index.page.ts
│ │ │ │ │ │ └── introduction.page.ts
│ │ │ │ ├── (examples)
│ │ │ │ │ ├── examples.page.ts
│ │ │ │ │ └── examples
│ │ │ │ │ │ ├── authentication
│ │ │ │ │ │ ├── (authentication).page.ts
│ │ │ │ │ │ └── components
│ │ │ │ │ │ │ └── form.component.ts
│ │ │ │ │ │ ├── index.page.ts
│ │ │ │ │ │ ├── music
│ │ │ │ │ │ ├── (music).page.ts
│ │ │ │ │ │ ├── components
│ │ │ │ │ │ │ ├── side-menu
│ │ │ │ │ │ │ │ ├── side-menu-button.component.ts
│ │ │ │ │ │ │ │ └── side-menu.component.ts
│ │ │ │ │ │ │ └── top-menu.component.ts
│ │ │ │ │ │ └── directives
│ │ │ │ │ │ │ └── fallback-img.directive.ts
│ │ │ │ │ │ ├── notes
│ │ │ │ │ │ ├── (notes).page.ts
│ │ │ │ │ │ └── components
│ │ │ │ │ │ │ ├── note-skeleton.component.ts
│ │ │ │ │ │ │ ├── note.component.ts
│ │ │ │ │ │ │ └── notes-empty.component.ts
│ │ │ │ │ │ ├── tasks
│ │ │ │ │ │ ├── (tasks).page.ts
│ │ │ │ │ │ ├── components
│ │ │ │ │ │ │ └── table-actions.component.ts
│ │ │ │ │ │ ├── pipes
│ │ │ │ │ │ │ ├── priority-icon.pipe.ts
│ │ │ │ │ │ │ └── status-icon.pipe.ts
│ │ │ │ │ │ └── services
│ │ │ │ │ │ │ ├── local-storage.service.ts
│ │ │ │ │ │ │ └── tasks.service.ts
│ │ │ │ │ │ └── typography
│ │ │ │ │ │ └── (typography).page.ts
│ │ │ │ ├── (home).page.ts
│ │ │ │ ├── (home)
│ │ │ │ │ └── components
│ │ │ │ │ │ ├── th-item-placeholder.component.ts
│ │ │ │ │ │ ├── th-item.component.ts
│ │ │ │ │ │ ├── three-hundred.component.ts
│ │ │ │ │ │ └── zerops-logo.component.ts
│ │ │ │ ├── (stack)
│ │ │ │ │ ├── stack.page.ts
│ │ │ │ │ └── stack
│ │ │ │ │ │ ├── (overview)
│ │ │ │ │ │ ├── components
│ │ │ │ │ │ │ └── architecture-diagram.component.ts
│ │ │ │ │ │ └── overview.page.ts
│ │ │ │ │ │ ├── (technologies)
│ │ │ │ │ │ ├── components
│ │ │ │ │ │ │ ├── architecture-diagram-analog.component.ts
│ │ │ │ │ │ │ ├── architecture-diagram-angular.component.ts
│ │ │ │ │ │ │ ├── architecture-diagram-drizzle.component.ts
│ │ │ │ │ │ │ ├── architecture-diagram-nx.component.ts
│ │ │ │ │ │ │ ├── architecture-diagram-supabase.component.ts
│ │ │ │ │ │ │ └── architecture-diagram-trpc.component.ts
│ │ │ │ │ │ └── technologies.page.ts
│ │ │ │ │ │ ├── [...not-found].page.ts
│ │ │ │ │ │ ├── index.page.ts
│ │ │ │ │ │ └── installation.page.ts
│ │ │ │ ├── [...not-found].page.ts
│ │ │ │ └── alpha.page.ts
│ │ │ └── shared
│ │ │ │ ├── breadcrumbs
│ │ │ │ ├── breadcrumb-shared.service.ts
│ │ │ │ ├── breadcrumb.service.ts
│ │ │ │ └── breadcrumbs.component.ts
│ │ │ │ ├── cli-mode.service.ts
│ │ │ │ ├── code
│ │ │ │ ├── code-preview.directive.ts
│ │ │ │ └── code.component.ts
│ │ │ │ ├── footer
│ │ │ │ └── footer.component.ts
│ │ │ │ ├── header
│ │ │ │ ├── header-dark-mode.component.ts
│ │ │ │ ├── header-mobile-nav.component.ts
│ │ │ │ ├── header-theme-picker.component.ts
│ │ │ │ └── header.component.ts
│ │ │ │ ├── input-error
│ │ │ │ ├── input-error.component.ts
│ │ │ │ └── input-error.directive.ts
│ │ │ │ ├── layout
│ │ │ │ ├── coming-soon.component.ts
│ │ │ │ ├── container.directive.ts
│ │ │ │ ├── main-section.directive.ts
│ │ │ │ ├── package-installer-tabs.component.ts
│ │ │ │ ├── page-bottom-nav-placeholder.component.ts
│ │ │ │ ├── page-bottom-nav
│ │ │ │ │ ├── page-bottom-nav-link.component.ts
│ │ │ │ │ └── page-bottom-nav.component.ts
│ │ │ │ ├── page-nav
│ │ │ │ │ ├── page-nav-link.component.ts
│ │ │ │ │ ├── page-nav-outlet.component.ts
│ │ │ │ │ └── page-nav.component.ts
│ │ │ │ ├── page.component.ts
│ │ │ │ ├── section-intro.component.ts
│ │ │ │ ├── section-sub-heading.component.ts
│ │ │ │ ├── side-nav
│ │ │ │ │ ├── side-nav-coming-soon.component.ts
│ │ │ │ │ ├── side-nav-content.component.ts
│ │ │ │ │ ├── side-nav-heading.directive.ts
│ │ │ │ │ ├── side-nav-link.directive.ts
│ │ │ │ │ ├── side-nav-links.directive.ts
│ │ │ │ │ └── side-nav.component.ts
│ │ │ │ ├── tabs-cli.component.ts
│ │ │ │ ├── tabs.component.ts
│ │ │ │ ├── ui-api-docs-table
│ │ │ │ │ └── ui-api-docs-table.component.ts
│ │ │ │ └── ui-docs-section
│ │ │ │ │ └── ui-docs-section.component.ts
│ │ │ │ ├── meta
│ │ │ │ └── meta.util.ts
│ │ │ │ ├── spartan-logo.component.ts
│ │ │ │ ├── spartan-nav-link.directive.ts
│ │ │ │ ├── theme.service.ts
│ │ │ │ └── typography
│ │ │ │ └── link.ts
│ │ ├── db.ts
│ │ ├── main.server.ts
│ │ ├── main.ts
│ │ ├── public
│ │ │ ├── assets
│ │ │ │ ├── .gitkeep
│ │ │ │ ├── avatar.png
│ │ │ │ ├── mountains.jpg
│ │ │ │ ├── music_img_fallback.svg
│ │ │ │ ├── og-image.png
│ │ │ │ └── spartan.svg
│ │ │ └── robots.txt
│ │ ├── server
│ │ │ ├── routes
│ │ │ │ ├── primitive-api.get.ts
│ │ │ │ └── trpc
│ │ │ │ │ └── [trpc].ts
│ │ │ └── trpc
│ │ │ │ ├── context.ts
│ │ │ │ ├── routers
│ │ │ │ ├── index.ts
│ │ │ │ └── notes.ts
│ │ │ │ └── trpc.ts
│ │ ├── styles.css
│ │ ├── test-setup.ts
│ │ ├── trpc-client.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.cjs
│ ├── tsconfig.app.json
│ ├── tsconfig.editor.json
│ ├── tsconfig.json
│ ├── tsconfig.spec.json
│ └── vite.config.ts
├── trpc-app-e2e
│ ├── eslint.config.cjs
│ ├── project.json
│ ├── tests
│ │ ├── app.spec.ts
│ │ └── fixtures
│ │ │ ├── notes.po.ts
│ │ │ └── notes.ts
│ ├── tsconfig.json
│ └── vite.config.ts
├── ui-storybook-e2e
│ ├── cypress.config.cjs
│ ├── eslint.config.cjs
│ ├── project.json
│ ├── src
│ │ ├── fixtures
│ │ │ └── example.json
│ │ ├── integration
│ │ │ ├── accordion
│ │ │ │ └── accordion.cy.ts
│ │ │ ├── alert-dialog
│ │ │ │ └── alert-dialog.cy.ts
│ │ │ ├── breadcrumb
│ │ │ │ └── breadcrumb.cy.ts
│ │ │ ├── calendar
│ │ │ │ └── calendar.cy.ts
│ │ │ ├── carousel
│ │ │ │ └── carousel.cy.ts
│ │ │ ├── checkbox
│ │ │ │ └── checkbox.cy.ts
│ │ │ ├── combobox
│ │ │ │ └── combobox.cy.ts
│ │ │ ├── command
│ │ │ │ ├── command--default.cy.ts
│ │ │ │ └── command--dynamic.cy.ts
│ │ │ ├── dialog
│ │ │ │ └── dialog.cy.ts
│ │ │ ├── label
│ │ │ │ └── label.cy.ts
│ │ │ ├── menu
│ │ │ │ ├── context-menu.cy.ts
│ │ │ │ ├── dropdown-menu.cy.ts
│ │ │ │ └── menubar.cy.ts
│ │ │ ├── popover
│ │ │ │ └── popover.cy.ts
│ │ │ ├── progress
│ │ │ │ └── progress.cy.ts
│ │ │ ├── radio-group
│ │ │ │ └── radio-group.cy.ts
│ │ │ ├── select
│ │ │ │ └── select.cy.ts
│ │ │ ├── separator
│ │ │ │ └── separator.cy.ts
│ │ │ ├── sheet
│ │ │ │ └── sheet.cy.ts
│ │ │ ├── slider
│ │ │ │ └── slider.cy.ts
│ │ │ ├── switch
│ │ │ │ └── switch.cy.ts
│ │ │ ├── tabs
│ │ │ │ ├── tabs--brnonly.cy.ts
│ │ │ │ ├── tabs--default--manual.cy.ts
│ │ │ │ ├── tabs--default.cy.ts
│ │ │ │ └── tabs--vertical.cy.ts
│ │ │ └── toggle-group
│ │ │ │ ├── toggle--toggle-group-form.cy.ts
│ │ │ │ ├── toggle--toggle-group-multiple-nullable.cy.ts
│ │ │ │ ├── toggle--toggle-group-multiple.cy.ts
│ │ │ │ ├── toggle--toggle-group-single--dynamic-options.cy.ts
│ │ │ │ ├── toggle--toggle-group-single-nullable.cy.ts
│ │ │ │ └── toggle--toggle-group-single.cy.ts
│ │ └── support
│ │ │ ├── commands.ts
│ │ │ └── e2e.ts
│ └── tsconfig.json
└── ui-storybook
│ ├── .storybook
│ ├── main.js
│ ├── preview.js
│ ├── tailwind.css
│ └── tsconfig.json
│ ├── README.md
│ ├── postcss.config.js
│ ├── project.json
│ ├── public
│ └── mountains.jpg
│ ├── src
│ └── index.ts
│ ├── stories
│ ├── accordion.stories.ts
│ ├── alert-dialog.stories.ts
│ ├── alert.stories.ts
│ ├── aspect-ratio.stories.ts
│ ├── avatar.stories.ts
│ ├── badge.stories.ts
│ ├── breadcrumb.stories.ts
│ ├── button.stories.ts
│ ├── calendar.stories.ts
│ ├── card.stories.ts
│ ├── carousel.stories.ts
│ ├── checkbox.stories.ts
│ ├── collapsible.stories.ts
│ ├── combobox.stories.ts
│ ├── command.stories.ts
│ ├── context-menu.stories.ts
│ ├── date-picker.stories.ts
│ ├── dialog.stories.ts
│ ├── dropdown-menu-bar.stories.ts
│ ├── dropdown-menu.stories.ts
│ ├── form-field.stories.ts
│ ├── hover-card.stories.ts
│ ├── icon.stories.ts
│ ├── input-otp.stories.ts
│ ├── input.stories.ts
│ ├── label.stories.ts
│ ├── pagination.stories.ts
│ ├── popover.stories.ts
│ ├── progress.stories.ts
│ ├── radio-group.stories.ts
│ ├── scroll-area.stories.ts
│ ├── select.stories.ts
│ ├── separator.stories.ts
│ ├── sheet.stories.ts
│ ├── skeleton.stories.ts
│ ├── slider.stories.ts
│ ├── sonner.stories.ts
│ ├── spinner.stories.ts
│ ├── switch.stories.ts
│ ├── table.stories.ts
│ ├── tabs.stories.ts
│ ├── toggle-group.stories.ts
│ ├── toggle.stories.ts
│ ├── tooltip.stories.ts
│ └── typography.stories.ts
│ ├── tailwind.config.js
│ ├── tsconfig.json
│ └── tsconfig.lib.json
├── commitlint.config.cjs
├── eslint.config.cjs
├── jest.config.ts
├── jest.preset.cjs
├── libs
├── .gitkeep
├── brain
│ ├── README.md
│ ├── accordion
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-accordion-content.component.ts
│ │ │ ├── brn-accordion.directive.spec.ts
│ │ │ └── brn-accordion.directive.ts
│ ├── alert-dialog
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-alert-dialog-content.directive.ts
│ │ │ ├── brn-alert-dialog-description.directive.ts
│ │ │ ├── brn-alert-dialog-overlay.component.ts
│ │ │ ├── brn-alert-dialog-title.directive.ts
│ │ │ ├── brn-alert-dialog-trigger.directive.ts
│ │ │ └── brn-alert-dialog.component.ts
│ ├── avatar
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-avatar.component.spec.ts
│ │ │ ├── brn-avatar.component.ts
│ │ │ ├── fallback
│ │ │ ├── brn-avatar-fallback.directive.spec.ts
│ │ │ ├── brn-avatar-fallback.directive.ts
│ │ │ └── index.ts
│ │ │ ├── image
│ │ │ ├── brn-avatar-image.directive.spec.ts
│ │ │ ├── brn-avatar-image.directive.ts
│ │ │ └── index.ts
│ │ │ └── util
│ │ │ ├── hex-color-for.spec.ts
│ │ │ ├── hex-color-for.ts
│ │ │ ├── index.ts
│ │ │ ├── initials.pipe.spec.ts
│ │ │ ├── initials.pipe.ts
│ │ │ ├── is-bright.spec.ts
│ │ │ └── is-bright.ts
│ ├── calendar
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-calendar-cell-button.directive.ts
│ │ │ ├── brn-calendar-cell.directive.ts
│ │ │ ├── brn-calendar-grid.directive.ts
│ │ │ ├── brn-calendar-header.directive.ts
│ │ │ ├── brn-calendar-next-button.directive.ts
│ │ │ ├── brn-calendar-previous-button.directive.ts
│ │ │ ├── brn-calendar-week.directive.ts
│ │ │ ├── brn-calendar-weekday.directive.ts
│ │ │ ├── brn-calendar.directive.ts
│ │ │ ├── brn-calendar.token.ts
│ │ │ ├── i18n
│ │ │ └── calendar-i18n.ts
│ │ │ └── mode
│ │ │ └── brn-calendar-multiple.directive.ts
│ ├── checkbox
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-checkbox-ng-model.spec.ts
│ │ │ ├── brn-checkbox.component.spec.ts
│ │ │ └── brn-checkbox.component.ts
│ ├── collapsible
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-collapsible-content.component.ts
│ │ │ ├── brn-collapsible-trigger.directive.ts
│ │ │ ├── brn-collapsible.component.spec.ts
│ │ │ └── brn-collapsible.component.ts
│ ├── command
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-command-empty.directive.ts
│ │ │ ├── brn-command-group.directive.ts
│ │ │ ├── brn-command-item.directive.ts
│ │ │ ├── brn-command-item.token.ts
│ │ │ ├── brn-command-list.directive.ts
│ │ │ ├── brn-command-search-input.directive.ts
│ │ │ ├── brn-command-search-input.token.ts
│ │ │ ├── brn-command.directive.ts
│ │ │ └── brn-command.token.ts
│ ├── core
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── helpers
│ │ │ ├── create-injection-token.ts
│ │ │ ├── custom-element-class-settable.ts
│ │ │ ├── dev-mode.ts
│ │ │ ├── exposes-side.ts
│ │ │ ├── exposes-state.ts
│ │ │ ├── hlm.ts
│ │ │ ├── table-classes-settable.ts
│ │ │ └── zone-free.ts
│ │ │ └── index.ts
│ ├── date-time-luxon
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── date-adapter.spec.ts
│ │ │ └── date-adapter.ts
│ ├── date-time
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── date-adapter.ts
│ │ │ ├── native-date-adapter.spec.ts
│ │ │ └── native-date-adapter.ts
│ ├── dialog
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-dialog-close.directive.ts
│ │ │ ├── brn-dialog-content.directive.ts
│ │ │ ├── brn-dialog-description.directive.ts
│ │ │ ├── brn-dialog-options.ts
│ │ │ ├── brn-dialog-overlay.component.ts
│ │ │ ├── brn-dialog-ref.ts
│ │ │ ├── brn-dialog-state.ts
│ │ │ ├── brn-dialog-title.directive.ts
│ │ │ ├── brn-dialog-token.ts
│ │ │ ├── brn-dialog-trigger.directive.ts
│ │ │ ├── brn-dialog-utils.ts
│ │ │ ├── brn-dialog.component.ts
│ │ │ └── brn-dialog.service.ts
│ ├── eslint.config.cjs
│ ├── form-field
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── brn-form-field-control.ts
│ ├── forms
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── control-value-accessor.ts
│ │ │ ├── error-options.ts
│ │ │ └── error-state-tracker.ts
│ ├── hlm-tailwind-preset.css
│ ├── hlm-tailwind-preset.js
│ ├── hover-card
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-hover-card-content.service.ts
│ │ │ ├── brn-hover-card.component.ts
│ │ │ └── createHoverObservable.ts
│ ├── input-otp
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-input-otp-slot.component.ts
│ │ │ ├── brn-input-otp.component.ts
│ │ │ └── brn-input-otp.token.ts
│ ├── jest.config.ts
│ ├── label
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── brn-label.directive.ts
│ ├── menu
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-context-menu-trigger.directive.ts
│ │ │ ├── brn-menu-align.ts
│ │ │ ├── brn-menu-bar.directive.ts
│ │ │ ├── brn-menu-group.directive.ts
│ │ │ ├── brn-menu-item-checkbox.directive.ts
│ │ │ ├── brn-menu-item-radio.directive.ts
│ │ │ ├── brn-menu-item.directive.ts
│ │ │ ├── brn-menu-trigger.directive.ts
│ │ │ └── brn-menu.directive.ts
│ ├── ng-package.json
│ ├── package.json
│ ├── popover
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-popover-close.directive.ts
│ │ │ ├── brn-popover-content.directive.ts
│ │ │ ├── brn-popover-trigger.directive.ts
│ │ │ └── brn-popover.component.ts
│ ├── progress
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-progress-indicator.component.ts
│ │ │ ├── brn-progress.component.spec.ts
│ │ │ ├── brn-progress.component.ts
│ │ │ └── brn-progress.token.ts
│ ├── project.json
│ ├── radio-group
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-radio-group.directive.ts
│ │ │ ├── brn-radio-group.token.ts
│ │ │ ├── brn-radio.component.spec.ts
│ │ │ └── brn-radio.component.ts
│ ├── select
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-select-content.component.ts
│ │ │ ├── brn-select-content.token.ts
│ │ │ ├── brn-select-group.directive.ts
│ │ │ ├── brn-select-label.directive.ts
│ │ │ ├── brn-select-option.directive.ts
│ │ │ ├── brn-select-placeholder.directive.ts
│ │ │ ├── brn-select-trigger.directive.ts
│ │ │ ├── brn-select-value.component.ts
│ │ │ ├── brn-select-value.directive.ts
│ │ │ ├── brn-select.component.ts
│ │ │ ├── brn-select.token.ts
│ │ │ └── tests
│ │ │ ├── brn-select.component.numbers.spec.ts
│ │ │ ├── brn-select.component.spec.ts
│ │ │ ├── select-multi-mode.spec.ts
│ │ │ ├── select-ng-model-form.ts
│ │ │ ├── select-reactive-form.ts
│ │ │ ├── select-single-mode.spec.ts
│ │ │ └── utils.ts
│ ├── separator
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── brn-separator.component.ts
│ ├── sheet
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-sheet-close.directive.ts
│ │ │ ├── brn-sheet-content.directive.ts
│ │ │ ├── brn-sheet-description.directive.ts
│ │ │ ├── brn-sheet-overlay.component.ts
│ │ │ ├── brn-sheet-title.directive.ts
│ │ │ ├── brn-sheet-trigger.directive.ts
│ │ │ └── brn-sheet.component.ts
│ ├── slider
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-slider-range.directive.ts
│ │ │ ├── brn-slider-thumb.directive.ts
│ │ │ ├── brn-slider-tick.directive.ts
│ │ │ ├── brn-slider-track.directive.ts
│ │ │ ├── brn-slider-track.token.ts
│ │ │ ├── brn-slider.directive.ts
│ │ │ ├── brn-slider.token.ts
│ │ │ └── tests
│ │ │ ├── brn-slider-reactive-form.spec.ts
│ │ │ ├── brn-slider-states.component.ts
│ │ │ └── brn-slider-template-driven-form.spec.ts
│ ├── src
│ │ ├── index.ts
│ │ └── test-setup.ts
│ ├── switch
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-switch-ng-model.spec.ts
│ │ │ ├── brn-switch-thumb.component.ts
│ │ │ ├── brn-switch.component.spec.ts
│ │ │ └── brn-switch.component.ts
│ ├── table
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-cell-def.directive.ts
│ │ │ ├── brn-column-def.component.ts
│ │ │ ├── brn-column-manager.spec.ts
│ │ │ ├── brn-column-manager.ts
│ │ │ ├── brn-footer-def.directive.ts
│ │ │ ├── brn-header-def.directive.ts
│ │ │ ├── brn-paginator.directive.ts
│ │ │ └── brn-table.component.ts
│ ├── tabs
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-tabs-content.directive.ts
│ │ │ ├── brn-tabs-list.directive.ts
│ │ │ ├── brn-tabs-paginated-list.directive.ts
│ │ │ ├── brn-tabs-trigger.directive.ts
│ │ │ └── brn-tabs.directive.ts
│ ├── toggle-group
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-toggle-group.component.spec.ts
│ │ │ ├── brn-toggle-group.component.ts
│ │ │ ├── brn-toggle-group.token.ts
│ │ │ └── brn-toggle-item.directive.ts
│ ├── toggle
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-toggle.directive.spec.ts
│ │ │ └── brn-toggle.directive.ts
│ ├── tooltip
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── brn-tooltip-content.component.ts
│ │ │ ├── brn-tooltip-content.directive.ts
│ │ │ ├── brn-tooltip-trigger.directive.ts
│ │ │ ├── brn-tooltip.directive.ts
│ │ │ ├── brn-tooltip.token.ts
│ │ │ ├── computed-previous.spec.ts
│ │ │ └── computed-previous.ts
│ ├── tsconfig.json
│ ├── tsconfig.lib.json
│ ├── tsconfig.lib.prod.json
│ └── tsconfig.spec.json
├── cli
│ ├── README.md
│ ├── eslint.config.cjs
│ ├── executors.json
│ ├── generators.json
│ ├── jest.config.ts
│ ├── package.json
│ ├── project.json
│ ├── src
│ │ ├── generators
│ │ │ ├── base
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── lib
│ │ │ │ │ ├── build-dependency-array.ts
│ │ │ │ │ ├── deleteFiles.ts
│ │ │ │ │ ├── get-target-library-directory.ts
│ │ │ │ │ └── initialize-angular-library.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ ├── schema.json
│ │ │ │ └── versions.ts
│ │ │ ├── healthcheck
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── healthchecks.ts
│ │ │ │ ├── healthchecks
│ │ │ │ │ ├── brain-imports.ts
│ │ │ │ │ ├── brn-radio.ts
│ │ │ │ │ ├── brn-toggle-group.ts
│ │ │ │ │ ├── core-imports.ts
│ │ │ │ │ ├── helm-imports.ts
│ │ │ │ │ ├── hlm-icon.ts
│ │ │ │ │ ├── hlm-scroll-area.ts
│ │ │ │ │ ├── hlm-select.ts
│ │ │ │ │ └── version.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ ├── schema.json
│ │ │ │ └── utils
│ │ │ │ │ ├── prompt.ts
│ │ │ │ │ ├── reporter.ts
│ │ │ │ │ └── runner.ts
│ │ │ ├── migrate-brain-imports
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── import-map.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ ├── schema.json
│ │ │ │ └── utils
│ │ │ │ │ └── binary-extensions.ts
│ │ │ ├── migrate-core
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── migrate-helm-imports
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── import-map.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── migrate-helm-libraries
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── migrate-icon
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── migrate-radio
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── migrate-scroll-area
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── migrate-select
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── migrate-toggle-group
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── theme
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── libs
│ │ │ │ │ ├── add-theme-to-application-styles.ts
│ │ │ │ │ └── supported-theme-generator-map.ts
│ │ │ │ └── schema.json
│ │ │ └── ui
│ │ │ │ ├── add-dependent-primitive.ts
│ │ │ │ ├── compat.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── libs
│ │ │ │ ├── ui-accordion-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-accordion-content.component.ts.template
│ │ │ │ │ │ │ ├── hlm-accordion-icon.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-accordion-item.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-accordion-trigger.directive.ts.template
│ │ │ │ │ │ │ └── hlm-accordion.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-alert-dialog-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-alert-dialog-action-button.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-alert-dialog-cancel-button.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-alert-dialog-content.component.ts.template
│ │ │ │ │ │ │ ├── hlm-alert-dialog-description.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-alert-dialog-footer.component.ts.template
│ │ │ │ │ │ │ ├── hlm-alert-dialog-header.component.ts.template
│ │ │ │ │ │ │ ├── hlm-alert-dialog-overlay.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-alert-dialog-title.directive.ts.template
│ │ │ │ │ │ │ └── hlm-alert-dialog.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-alert-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-alert-description.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-alert-icon.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-alert-title.directive.ts.template
│ │ │ │ │ │ │ └── hlm-alert.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-aspect-ratio-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── helm-aspect-ratio.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-avatar-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── fallback
│ │ │ │ │ │ │ ├── hlm-avatar-fallback.directive.ts.template
│ │ │ │ │ │ │ └── index.ts.template
│ │ │ │ │ │ │ ├── hlm-avatar.component.ts.template
│ │ │ │ │ │ │ └── image
│ │ │ │ │ │ │ ├── hlm-avatar-image.directive.ts.template
│ │ │ │ │ │ │ └── index.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-badge-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── hlm-badge.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-breadcrumb-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-breadcrumb-ellipsis.component.ts.template
│ │ │ │ │ │ │ ├── hlm-breadcrumb-item.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-breadcrumb-link.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-breadcrumb-list.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-breadcrumb-page.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-breadcrumb-separator.component.ts.template
│ │ │ │ │ │ │ └── hlm-breadcrumb.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-button-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-button.directive.ts.template
│ │ │ │ │ │ │ └── hlm-button.token.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-calendar-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-calendar-multi.component.ts.template
│ │ │ │ │ │ │ └── hlm-calendar.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-card-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-card-content.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-card-description.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-card-footer.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-card-header.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-card-title.directive.ts.template
│ │ │ │ │ │ │ └── hlm-card.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-carousel-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-carousel-content.component.ts.template
│ │ │ │ │ │ │ ├── hlm-carousel-item.component.ts.template
│ │ │ │ │ │ │ ├── hlm-carousel-next.component.ts.template
│ │ │ │ │ │ │ ├── hlm-carousel-previous.component.ts.template
│ │ │ │ │ │ │ ├── hlm-carousel-slide-display.component.ts.template
│ │ │ │ │ │ │ └── hlm-carousel.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-checkbox-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── hlm-checkbox.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-command-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-command-dialog-close-button.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-command-dialog.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-command-empty.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-command-group-label.component.ts.template
│ │ │ │ │ │ │ ├── hlm-command-group.component.ts.template
│ │ │ │ │ │ │ ├── hlm-command-icon.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-command-item.component.ts.template
│ │ │ │ │ │ │ ├── hlm-command-list.component.ts.template
│ │ │ │ │ │ │ ├── hlm-command-search-input.component.ts.template
│ │ │ │ │ │ │ ├── hlm-command-search.component.ts.template
│ │ │ │ │ │ │ ├── hlm-command-separator.component.ts.template
│ │ │ │ │ │ │ ├── hlm-command-shortcut.component.ts.template
│ │ │ │ │ │ │ └── hlm-command.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-date-picker-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-date-picker-multi.component.ts.template
│ │ │ │ │ │ │ ├── hlm-date-picker-multi.token.ts.template
│ │ │ │ │ │ │ ├── hlm-date-picker.component.ts.template
│ │ │ │ │ │ │ └── hlm-date-picker.token.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-dialog-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-dialog-close.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-dialog-content.component.ts.template
│ │ │ │ │ │ │ ├── hlm-dialog-description.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-dialog-footer.component.ts.template
│ │ │ │ │ │ │ ├── hlm-dialog-header.component.ts.template
│ │ │ │ │ │ │ ├── hlm-dialog-overlay.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-dialog-title.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-dialog.component.ts.template
│ │ │ │ │ │ │ └── hlm-dialog.service.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-form-field-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-error.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-form-field.component.ts.template
│ │ │ │ │ │ │ └── hlm-hint.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-hover-card-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── hlm-hover-card-content.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-icon-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-icon.directive.ts.template
│ │ │ │ │ │ │ └── hlm-icon.token.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-input-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-input-error.directive.ts.template
│ │ │ │ │ │ │ └── hlm-input.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-input-otp-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-input-otp-fake-caret.component.ts.template
│ │ │ │ │ │ │ ├── hlm-input-otp-group.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-input-otp-separator.component.ts.template
│ │ │ │ │ │ │ ├── hlm-input-otp-slot.component.ts.template
│ │ │ │ │ │ │ └── hlm-input-otp.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-label-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── hlm-label.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-menu-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-menu-bar-item.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-bar.component.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-group.component.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-item-check.component.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-item-checkbox.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-item-icon.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-item-radio.component.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-item-radio.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-item-sub-indicator.component.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-item.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-label.component.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-separator.component.ts.template
│ │ │ │ │ │ │ ├── hlm-menu-shortcut.component.ts.template
│ │ │ │ │ │ │ ├── hlm-menu.component.ts.template
│ │ │ │ │ │ │ └── hlm-sub-menu.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-pagination-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-numbered-pagination.component.ts.template
│ │ │ │ │ │ │ ├── hlm-pagination-content.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-pagination-ellipsis.component.ts.template
│ │ │ │ │ │ │ ├── hlm-pagination-item.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-pagination-link.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-pagination-next.component.ts.template
│ │ │ │ │ │ │ ├── hlm-pagination-previous.component.ts.template
│ │ │ │ │ │ │ └── hlm-pagination.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-popover-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-popover-close.directive.ts.template
│ │ │ │ │ │ │ └── hlm-popover-content.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-progress-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-progress-indicator.directive.ts.template
│ │ │ │ │ │ │ └── hlm-progress.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-radio-group-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-radio-group.component.ts.template
│ │ │ │ │ │ │ ├── hlm-radio-indicator.component.ts.template
│ │ │ │ │ │ │ └── hlm-radio.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-scroll-area-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── hlm-scroll-area.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-select-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-select-content.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-select-group.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-select-label.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-select-option.component.ts.template
│ │ │ │ │ │ │ ├── hlm-select-scroll-down.component.ts.template
│ │ │ │ │ │ │ ├── hlm-select-scroll-up.component.ts.template
│ │ │ │ │ │ │ ├── hlm-select-trigger.component.ts.template
│ │ │ │ │ │ │ ├── hlm-select-value.directive.ts.template
│ │ │ │ │ │ │ └── hlm-select.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-separator-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── hlm-separator.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-sheet-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-sheet-close.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-sheet-content.component.ts.template
│ │ │ │ │ │ │ ├── hlm-sheet-description.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-sheet-footer.component.ts.template
│ │ │ │ │ │ │ ├── hlm-sheet-header.component.ts.template
│ │ │ │ │ │ │ ├── hlm-sheet-overlay.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-sheet-title.directive.ts.template
│ │ │ │ │ │ │ └── hlm-sheet.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-skeleton-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── hlm-skeleton.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-slider-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── hlm-slider.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-sonner-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── hlm-toaster.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-spinner-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── hlm-spinner.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-switch-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-switch-thumb.directive.ts.template
│ │ │ │ │ │ │ └── hlm-switch.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-table-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-caption.component.ts.template
│ │ │ │ │ │ │ ├── hlm-table.component.ts.template
│ │ │ │ │ │ │ ├── hlm-table.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-td.component.ts.template
│ │ │ │ │ │ │ ├── hlm-th.component.ts.template
│ │ │ │ │ │ │ └── hlm-trow.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-tabs-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-tabs-content.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-tabs-list.component.ts.template
│ │ │ │ │ │ │ ├── hlm-tabs-paginated-list.component.ts.template
│ │ │ │ │ │ │ ├── hlm-tabs-trigger.directive.ts.template
│ │ │ │ │ │ │ └── hlm-tabs.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-toggle-group-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-toggle-group.directive.ts.template
│ │ │ │ │ │ │ ├── hlm-toggle-group.token.ts.template
│ │ │ │ │ │ │ └── hlm-toggle-item.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-toggle-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ └── hlm-toggle.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── ui-tooltip-helm
│ │ │ │ │ ├── files
│ │ │ │ │ │ ├── index.ts.template
│ │ │ │ │ │ └── lib
│ │ │ │ │ │ │ ├── hlm-tooltip-trigger.directive.ts.template
│ │ │ │ │ │ │ └── hlm-tooltip.component.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ └── ui-typography-helm
│ │ │ │ │ ├── files
│ │ │ │ │ ├── index.ts.template
│ │ │ │ │ └── lib
│ │ │ │ │ │ ├── hlm-blockquote.directive.ts.template
│ │ │ │ │ │ ├── hlm-code.directive.ts.template
│ │ │ │ │ │ ├── hlm-h1.directive.ts.template
│ │ │ │ │ │ ├── hlm-h2.directive.ts.template
│ │ │ │ │ │ ├── hlm-h3.directive.ts.template
│ │ │ │ │ │ ├── hlm-h4.directive.ts.template
│ │ │ │ │ │ ├── hlm-large.directive.ts.template
│ │ │ │ │ │ ├── hlm-lead.directive.ts.template
│ │ │ │ │ │ ├── hlm-muted.directive.ts.template
│ │ │ │ │ │ ├── hlm-p.directive.ts.template
│ │ │ │ │ │ ├── hlm-small.directive.ts.template
│ │ │ │ │ │ └── hlm-ul.directive.ts.template
│ │ │ │ │ └── generator.ts
│ │ │ │ ├── primitive-deps.ts
│ │ │ │ ├── primitives.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ ├── schema.json
│ │ │ │ └── supported-ui-libraries.json
│ │ ├── index.ts
│ │ └── utils
│ │ │ ├── config.ts
│ │ │ ├── get-project-names.ts
│ │ │ ├── hlm-class.ts
│ │ │ ├── tsconfig.ts
│ │ │ ├── version-utils.ts
│ │ │ └── visit-files.ts
│ ├── tsconfig.json
│ ├── tsconfig.lib.json
│ └── tsconfig.spec.json
├── helm
│ ├── README.md
│ ├── accordion
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-accordion-content.component.ts
│ │ │ ├── hlm-accordion-icon.directive.ts
│ │ │ ├── hlm-accordion-item.directive.ts
│ │ │ ├── hlm-accordion-trigger.directive.ts
│ │ │ └── hlm-accordion.directive.ts
│ ├── alert-dialog
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-alert-dialog-action-button.directive.ts
│ │ │ ├── hlm-alert-dialog-cancel-button.directive.ts
│ │ │ ├── hlm-alert-dialog-content.component.ts
│ │ │ ├── hlm-alert-dialog-description.directive.ts
│ │ │ ├── hlm-alert-dialog-footer.component.ts
│ │ │ ├── hlm-alert-dialog-header.component.ts
│ │ │ ├── hlm-alert-dialog-overlay.directive.ts
│ │ │ ├── hlm-alert-dialog-title.directive.ts
│ │ │ └── hlm-alert-dialog.component.ts
│ ├── alert
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-alert-description.directive.ts
│ │ │ ├── hlm-alert-icon.directive.ts
│ │ │ ├── hlm-alert-title.directive.ts
│ │ │ └── hlm-alert.directive.ts
│ ├── aspect-ratio
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── helm-aspect-ratio.directive.spec.ts
│ │ │ └── helm-aspect-ratio.directive.ts
│ ├── avatar
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── fallback
│ │ │ ├── hlm-avatar-fallback.directive.spec.ts
│ │ │ ├── hlm-avatar-fallback.directive.ts
│ │ │ └── index.ts
│ │ │ ├── hlm-avatar.component.spec.ts
│ │ │ ├── hlm-avatar.component.ts
│ │ │ └── image
│ │ │ ├── hlm-avatar-image.directive.spec.ts
│ │ │ ├── hlm-avatar-image.directive.ts
│ │ │ └── index.ts
│ ├── badge
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── hlm-badge.directive.ts
│ ├── breadcrumb
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-breadcrumb-ellipsis.component.ts
│ │ │ ├── hlm-breadcrumb-item.directive.ts
│ │ │ ├── hlm-breadcrumb-link.directive.ts
│ │ │ ├── hlm-breadcrumb-list.directive.ts
│ │ │ ├── hlm-breadcrumb-page.directive.ts
│ │ │ ├── hlm-breadcrumb-separator.component.ts
│ │ │ └── hlm-breadcrumb.directive.ts
│ ├── button
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-button.directive.ts
│ │ │ └── hlm-button.token.ts
│ ├── calendar
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-calendar-multi.component.ts
│ │ │ └── hlm-calendar.component.ts
│ ├── card
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-card-content.directive.ts
│ │ │ ├── hlm-card-description.directive.ts
│ │ │ ├── hlm-card-footer.directive.ts
│ │ │ ├── hlm-card-header.directive.ts
│ │ │ ├── hlm-card-title.directive.ts
│ │ │ └── hlm-card.directive.ts
│ ├── carousel
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-carousel-content.component.ts
│ │ │ ├── hlm-carousel-item.component.ts
│ │ │ ├── hlm-carousel-next.component.ts
│ │ │ ├── hlm-carousel-previous.component.ts
│ │ │ ├── hlm-carousel-slide-display.component.ts
│ │ │ └── hlm-carousel.component.ts
│ ├── checkbox
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── hlm-checkbox.component.ts
│ ├── command
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-command-dialog-close-button.directive.ts
│ │ │ ├── hlm-command-dialog.directive.ts
│ │ │ ├── hlm-command-empty.directive.ts
│ │ │ ├── hlm-command-group-label.component.ts
│ │ │ ├── hlm-command-group.component.ts
│ │ │ ├── hlm-command-icon.directive.ts
│ │ │ ├── hlm-command-item.component.ts
│ │ │ ├── hlm-command-list.component.ts
│ │ │ ├── hlm-command-search-input.component.ts
│ │ │ ├── hlm-command-search.component.ts
│ │ │ ├── hlm-command-separator.component.ts
│ │ │ ├── hlm-command-shortcut.component.ts
│ │ │ └── hlm-command.component.ts
│ ├── date-picker
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-date-picker-multi.component.ts
│ │ │ ├── hlm-date-picker-multi.token.ts
│ │ │ ├── hlm-date-picker.component.ts
│ │ │ └── hlm-date-picker.token.ts
│ ├── dialog
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-dialog-close.directive.ts
│ │ │ ├── hlm-dialog-content.component.ts
│ │ │ ├── hlm-dialog-description.directive.ts
│ │ │ ├── hlm-dialog-footer.component.ts
│ │ │ ├── hlm-dialog-header.component.ts
│ │ │ ├── hlm-dialog-overlay.directive.ts
│ │ │ ├── hlm-dialog-title.directive.ts
│ │ │ ├── hlm-dialog.component.ts
│ │ │ └── hlm-dialog.service.ts
│ ├── eslint.config.cjs
│ ├── form-field
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── form-field.spec.ts
│ │ │ ├── hlm-error.directive.ts
│ │ │ ├── hlm-form-field.component.ts
│ │ │ └── hlm-hint.directive.ts
│ ├── hover-card
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── hlm-hover-card-content.component.ts
│ ├── icon
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-icon.directive.spec.ts
│ │ │ ├── hlm-icon.directive.ts
│ │ │ └── hlm-icon.token.ts
│ ├── input-otp
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-input-otp-fake-caret.component.ts
│ │ │ ├── hlm-input-otp-group.directive.ts
│ │ │ ├── hlm-input-otp-separator.component.ts
│ │ │ ├── hlm-input-otp-slot.component.ts
│ │ │ └── hlm-input-otp.directive.ts
│ ├── input
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-input-error.directive.ts
│ │ │ └── hlm-input.directive.ts
│ ├── jest.config.ts
│ ├── label
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── hlm-label.directive.ts
│ ├── menu
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-menu-bar-item.directive.ts
│ │ │ ├── hlm-menu-bar.component.ts
│ │ │ ├── hlm-menu-group.component.ts
│ │ │ ├── hlm-menu-item-check.component.ts
│ │ │ ├── hlm-menu-item-checkbox.directive.ts
│ │ │ ├── hlm-menu-item-icon.directive.ts
│ │ │ ├── hlm-menu-item-radio.component.ts
│ │ │ ├── hlm-menu-item-radio.directive.ts
│ │ │ ├── hlm-menu-item-sub-indicator.component.ts
│ │ │ ├── hlm-menu-item.directive.ts
│ │ │ ├── hlm-menu-label.component.ts
│ │ │ ├── hlm-menu-separator.component.ts
│ │ │ ├── hlm-menu-shortcut.component.ts
│ │ │ ├── hlm-menu.component.ts
│ │ │ └── hlm-sub-menu.component.ts
│ ├── ng-package.json
│ ├── package.json
│ ├── pagination
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-numbered-pagination.component.ts
│ │ │ ├── hlm-pagination-content.directive.ts
│ │ │ ├── hlm-pagination-ellipsis.component.ts
│ │ │ ├── hlm-pagination-item.directive.ts
│ │ │ ├── hlm-pagination-link.directive.ts
│ │ │ ├── hlm-pagination-next.component.ts
│ │ │ ├── hlm-pagination-previous.component.ts
│ │ │ └── hlm-pagination.directive.ts
│ ├── popover
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-popover-close.directive.ts
│ │ │ └── hlm-popover-content.directive.ts
│ ├── progress
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-progress-indicator.directive.ts
│ │ │ └── hlm-progress.directive.ts
│ ├── project.json
│ ├── radio-group
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-radio-group.component.ts
│ │ │ ├── hlm-radio-indicator.component.ts
│ │ │ └── hlm-radio.component.ts
│ ├── scroll-area
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── hlm-scroll-area.directive.ts
│ ├── select
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-select-content.directive.ts
│ │ │ ├── hlm-select-group.directive.ts
│ │ │ ├── hlm-select-label.directive.ts
│ │ │ ├── hlm-select-option.component.ts
│ │ │ ├── hlm-select-scroll-down.component.ts
│ │ │ ├── hlm-select-scroll-up.component.ts
│ │ │ ├── hlm-select-trigger.component.ts
│ │ │ ├── hlm-select-value.directive.ts
│ │ │ └── hlm-select.directive.ts
│ ├── separator
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── hlm-separator.directive.ts
│ ├── sheet
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-sheet-close.directive.ts
│ │ │ ├── hlm-sheet-content.component.ts
│ │ │ ├── hlm-sheet-description.directive.ts
│ │ │ ├── hlm-sheet-footer.component.ts
│ │ │ ├── hlm-sheet-header.component.ts
│ │ │ ├── hlm-sheet-overlay.directive.ts
│ │ │ ├── hlm-sheet-title.directive.ts
│ │ │ └── hlm-sheet.component.ts
│ ├── skeleton
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── hlm-skeleton.component.ts
│ ├── slider
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── hlm-slider.component.ts
│ ├── sonner
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── hlm-toaster.component.ts
│ ├── spinner
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── hlm-spinner.component.ts
│ ├── src
│ │ ├── index.ts
│ │ └── test-setup.ts
│ ├── switch
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-switch-thumb.directive.ts
│ │ │ └── hlm-switch.component.ts
│ ├── table
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-caption.component.ts
│ │ │ ├── hlm-table.component.ts
│ │ │ ├── hlm-table.directive.ts
│ │ │ ├── hlm-td.component.ts
│ │ │ ├── hlm-th.component.ts
│ │ │ └── hlm-trow.component.ts
│ ├── tabs
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-tabs-content.directive.ts
│ │ │ ├── hlm-tabs-list.component.ts
│ │ │ ├── hlm-tabs-paginated-list.component.ts
│ │ │ ├── hlm-tabs-trigger.directive.ts
│ │ │ └── hlm-tabs.component.ts
│ ├── toggle-group
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-toggle-group.directive.ts
│ │ │ ├── hlm-toggle-group.token.ts
│ │ │ └── hlm-toggle-item.directive.ts
│ ├── toggle
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ └── hlm-toggle.directive.ts
│ ├── tooltip
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ │ ├── index.ts
│ │ │ └── lib
│ │ │ ├── hlm-tooltip-trigger.directive.ts
│ │ │ └── hlm-tooltip.component.ts
│ ├── tsconfig.json
│ ├── tsconfig.lib.json
│ ├── tsconfig.lib.prod.json
│ ├── tsconfig.spec.json
│ └── typography
│ │ ├── README.md
│ │ ├── ng-package.json
│ │ └── src
│ │ ├── index.ts
│ │ └── lib
│ │ ├── hlm-blockquote.directive.ts
│ │ ├── hlm-code.directive.ts
│ │ ├── hlm-h1.directive.ts
│ │ ├── hlm-h2.directive.ts
│ │ ├── hlm-h3.directive.ts
│ │ ├── hlm-h4.directive.ts
│ │ ├── hlm-large.directive.ts
│ │ ├── hlm-lead.directive.ts
│ │ ├── hlm-muted.directive.ts
│ │ ├── hlm-p.directive.ts
│ │ ├── hlm-small.directive.ts
│ │ └── hlm-ul.directive.ts
├── tools
│ ├── README.md
│ ├── eslint.config.cjs
│ ├── executors.json
│ ├── generators.json
│ ├── jest.config.ts
│ ├── package.json
│ ├── project.json
│ ├── src
│ │ ├── executors
│ │ │ ├── docs
│ │ │ │ └── generate-ui-docs
│ │ │ │ │ ├── executor.spec.ts
│ │ │ │ │ ├── executor.ts
│ │ │ │ │ ├── schema.d.ts
│ │ │ │ │ └── schema.json
│ │ │ └── release
│ │ │ │ ├── build-update-publish
│ │ │ │ ├── executor.spec.ts
│ │ │ │ ├── executor.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ │ ├── helpers
│ │ │ │ ├── projects.helpers.spec.ts
│ │ │ │ └── projects.helpers.ts
│ │ │ │ └── npm-publish
│ │ │ │ ├── executor.spec.ts
│ │ │ │ ├── executor.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ ├── generators
│ │ │ ├── auto-increment-version
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ └── schema.json
│ │ │ ├── brain-secondary-entrypoint
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── helm-component
│ │ │ │ ├── files
│ │ │ │ │ └── hlm-__fileName__.component.ts.template
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── helm-directive
│ │ │ │ ├── files
│ │ │ │ │ └── hlm-__fileName__.directive.ts.template
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── helm-documentation
│ │ │ │ ├── files
│ │ │ │ │ └── (__fileName__)
│ │ │ │ │ │ ├── __fileName__.page.ts.template
│ │ │ │ │ │ └── __fileName__.preview.ts.template
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── helm-secondary-entrypoint
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── helm-story
│ │ │ │ ├── files
│ │ │ │ │ └── __fileName__.stories.ts.template
│ │ │ │ ├── generator.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── hlm-to-cli-generator
│ │ │ │ ├── files
│ │ │ │ │ └── generator.ts.template
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ ├── lib
│ │ │ │ │ ├── add-primitive-to-supported-ui-libraries.ts
│ │ │ │ │ └── file-management.ts
│ │ │ │ ├── schema.d.ts
│ │ │ │ └── schema.json
│ │ │ ├── replace-cli-version
│ │ │ │ ├── generator.ts
│ │ │ │ └── schema.json
│ │ │ ├── replace-ui-version
│ │ │ │ ├── generator.spec.ts
│ │ │ │ ├── generator.ts
│ │ │ │ └── schema.json
│ │ │ └── utils
│ │ │ │ └── ast.ts
│ │ └── index.ts
│ ├── tsconfig.json
│ ├── tsconfig.lib.json
│ └── tsconfig.spec.json
└── trpc
│ ├── README.md
│ ├── eslint.config.cjs
│ ├── migrations
│ └── migration.json
│ ├── ng-package.json
│ ├── package.json
│ ├── project.json
│ ├── src
│ ├── index.ts
│ ├── lib
│ │ ├── client
│ │ │ ├── cache-state.ts
│ │ │ ├── client.ts
│ │ │ ├── links
│ │ │ │ └── transfer-state-link.ts
│ │ │ ├── shared-internal.ts
│ │ │ └── trpc-rxjs-proxy.ts
│ │ ├── server
│ │ │ └── server.ts
│ │ └── utils
│ │ │ └── wait-for.ts
│ └── test-setup.ts
│ ├── tsconfig.json
│ ├── tsconfig.lib.json
│ ├── tsconfig.lib.prod.json
│ └── vite.config.ts
├── nx.json
├── package.json
├── pnpm-lock.yaml
├── project.json
├── release.config.mjs
├── spartan.svg
├── tools
├── eslint-rules
│ ├── index.ts
│ ├── jest.config.ts
│ ├── project.json
│ ├── rules
│ │ ├── prefer-rxjs-operator-compat.ts
│ │ └── prefer-signals.ts
│ ├── tsconfig.json
│ ├── tsconfig.lint.json
│ └── tsconfig.spec.json
├── scripts
│ └── drizzle-migrate.config.ts
└── tsconfig.tools.json
├── tsconfig.base.json
├── zerops-import-example.yml
└── zerops.yml
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = tab
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/.githooks/commit-msg:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | pnpx commitlint -e
4 |
--------------------------------------------------------------------------------
/.githooks/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | pnpm nx format:write
4 |
--------------------------------------------------------------------------------
/.githooks/pre-push:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | pnpm nx affected -t lint --parallel
4 | pnpm nx format:check
5 |
--------------------------------------------------------------------------------
/.node-version:
--------------------------------------------------------------------------------
1 | 22.9.0
2 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | # Add files here to ignore them from prettier formatting
2 | /dist
3 | /coverage
4 | .angular
5 | .prettierignore
6 | .vercel
7 | /tmp
8 | /node_modules
9 | /stats.html
10 | pnpm-lock.yaml
11 |
12 | /.nx/cache
13 |
14 | /.nx/workspace-data
15 |
16 | *.css
17 |
--------------------------------------------------------------------------------
/.prettierrc.mjs:
--------------------------------------------------------------------------------
1 | export default {
2 | printWidth: 120,
3 | singleQuote: true,
4 | useTabs: true,
5 | bracketSpacing: true,
6 | htmlWhitespaceSensitivity: 'ignore',
7 | plugins: ['prettier-plugin-organize-imports', 'prettier-plugin-packagejson', 'prettier-plugin-tailwindcss'],
8 | };
9 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "nrwl.angular-console",
4 | "esbenp.prettier-vscode",
5 | "firsttris.vscode-jest-runner",
6 | "dbaeumer.vscode-eslint"
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------
/apps/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spartan-ng/spartan/96aa303eef52309cdbd957bb21d178b37b76319d/apps/.gitkeep
--------------------------------------------------------------------------------
/apps/app/drizzle.config.ts:
--------------------------------------------------------------------------------
1 | // drizzle.config.ts
2 | import { defineConfig } from 'drizzle-kit';
3 |
4 | export default defineConfig({
5 | out: './apps/app/drizzle',
6 | dialect: 'postgresql',
7 | schema: './apps/app/src/db.ts',
8 |
9 | dbCredentials: {
10 | url: `${process.env['DATABASE_URL']}`,
11 | },
12 | });
13 |
--------------------------------------------------------------------------------
/apps/app/drizzle/0000_melted_weapon_omega.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS "note" (
2 | "id" serial PRIMARY KEY NOT NULL,
3 | "title" text NOT NULL,
4 | "content" text,
5 | "created_at" timestamp DEFAULT now() NOT NULL
6 | );
7 |
--------------------------------------------------------------------------------
/apps/app/drizzle/meta/_journal.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "7",
3 | "dialect": "postgresql",
4 | "entries": [
5 | {
6 | "idx": 0,
7 | "version": "7",
8 | "when": 1733318438843,
9 | "tag": "0000_melted_weapon_omega",
10 | "breakpoints": true
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/apps/app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@spartan-ng/app",
3 | "type": "module"
4 | }
5 |
--------------------------------------------------------------------------------
/apps/app/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | const { join } = require('node:path');
2 |
3 | module.exports = {
4 | plugins: {
5 | tailwindcss: {
6 | config: join(__dirname, 'tailwind.config.cjs'),
7 | },
8 | autoprefixer: {},
9 | },
10 | };
11 |
--------------------------------------------------------------------------------
/apps/app/src/app.config.server.ts:
--------------------------------------------------------------------------------
1 | import { type ApplicationConfig, mergeApplicationConfig } from '@angular/core';
2 | import { provideClientHydration } from '@angular/platform-browser';
3 | import { provideServerRendering } from '@angular/platform-server';
4 | import { appConfig } from './app.config';
5 |
6 | const serverConfig: ApplicationConfig = {
7 | providers: [provideServerRendering(), provideClientHydration()],
8 | };
9 |
10 | export const config = mergeApplicationConfig(appConfig, serverConfig);
11 |
--------------------------------------------------------------------------------
/apps/app/src/app/app.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed } from '@angular/core/testing';
2 | import { RouterTestingModule } from '@angular/router/testing';
3 | import { AppComponent } from './app.component';
4 |
5 | describe('AppComponent', () => {
6 | beforeEach(async () => {
7 | await TestBed.configureTestingModule({
8 | imports: [RouterTestingModule, AppComponent],
9 | }).compileComponents();
10 | });
11 |
12 | it('should create the app', () => {
13 | const fixture = TestBed.createComponent(AppComponent);
14 | const app = fixture.componentInstance;
15 | expect(app).toBeTruthy();
16 | });
17 | });
18 |
--------------------------------------------------------------------------------
/apps/app/src/app/pages/(components)/components.server.ts:
--------------------------------------------------------------------------------
1 | import { PageServerLoad } from '@analogjs/router';
2 |
3 | export const load = async ({ fetch }: PageServerLoad) => {
4 | return await fetch('/api/primitive-api');
5 | };
6 |
--------------------------------------------------------------------------------
/apps/app/src/app/pages/(components)/components/index.page.ts:
--------------------------------------------------------------------------------
1 | import type { RouteMeta } from '@analogjs/router';
2 |
3 | export const routeMeta: RouteMeta = {
4 | redirectTo: '/components/accordion',
5 | pathMatch: 'full',
6 | };
7 |
--------------------------------------------------------------------------------
/apps/app/src/app/pages/(components)/components/installation-cs.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'spartan-installation-cs',
5 | standalone: true,
6 | host: {
7 | class: 'p-20 flex items-center justify-center ',
8 | },
9 | template: `
10 | Coming soon...
11 | `,
12 | })
13 | export class InstallationCsComponent {}
14 |
--------------------------------------------------------------------------------
/apps/app/src/app/pages/(documentation)/documentation.page.ts:
--------------------------------------------------------------------------------
1 | import type { RouteMeta } from '@analogjs/router';
2 | import { Component } from '@angular/core';
3 | import { PageComponent } from '@spartan-ng/app/app/shared/layout/page.component';
4 |
5 | export const routeMeta: RouteMeta = {
6 | data: {
7 | breadcrumb: 'Docs',
8 | },
9 | };
10 | @Component({
11 | selector: 'spartan-documentation',
12 | imports: [PageComponent],
13 | template: `
14 |
15 | `,
16 | })
17 | export default class ExamplesPageComponent {}
18 |
--------------------------------------------------------------------------------
/apps/app/src/app/pages/(documentation)/documentation/index.page.ts:
--------------------------------------------------------------------------------
1 | import type { RouteMeta } from '@analogjs/router';
2 |
3 | export const routeMeta: RouteMeta = {
4 | redirectTo: '/documentation/introduction',
5 | pathMatch: 'full',
6 | };
7 |
--------------------------------------------------------------------------------
/apps/app/src/app/pages/(examples)/examples/index.page.ts:
--------------------------------------------------------------------------------
1 | import type { RouteMeta } from '@analogjs/router';
2 |
3 | export const routeMeta: RouteMeta = {
4 | redirectTo: '/examples/notes',
5 | pathMatch: 'full',
6 | };
7 |
--------------------------------------------------------------------------------
/apps/app/src/app/pages/(stack)/stack/index.page.ts:
--------------------------------------------------------------------------------
1 | import type { RouteMeta } from '@analogjs/router';
2 |
3 | export const routeMeta: RouteMeta = {
4 | redirectTo: '/stack/overview',
5 | pathMatch: 'full',
6 | };
7 |
--------------------------------------------------------------------------------
/apps/app/src/app/pages/alpha.page.ts:
--------------------------------------------------------------------------------
1 | import type { RouteMeta } from '@analogjs/router';
2 |
3 | export const routeMeta: RouteMeta = {
4 | redirectTo: '/documentation/changelog#initial-alpha',
5 | pathMatch: 'full',
6 | };
7 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/cli-mode.service.ts:
--------------------------------------------------------------------------------
1 | import { Injectable, signal } from '@angular/core';
2 |
3 | export type CLIMode = 'cli' | 'nx';
4 |
5 | @Injectable({
6 | providedIn: 'root',
7 | })
8 | export class CLIModeService {
9 | private readonly _cliMode = signal('nx');
10 |
11 | public setCliMode(value: CLIMode): void {
12 | this._cliMode.set(value);
13 | }
14 |
15 | public cliMode = this._cliMode.asReadonly();
16 | }
17 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/code/code-preview.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 |
3 | @Directive({
4 | selector: '[spartanCodePreview]',
5 | standalone: true,
6 | host: {
7 | class: 'preview flex min-h-[350px] w-full justify-center p-10 items-center',
8 | },
9 | })
10 | export class CodePreviewDirective {}
11 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/layout/coming-soon.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { hlmMuted } from '@spartan-ng/helm/typography';
3 |
4 | @Component({
5 | selector: 'spartan-coming-soon',
6 | standalone: true,
7 | host: {
8 | class: 'justify-center relative flex-1 flex items-center mb-8',
9 | },
10 | template: `
11 | Coming soon...
12 | `,
13 | })
14 | export class ComingSoonComponent {}
15 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/layout/container.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 |
3 | @Directive({
4 | selector: '[spartanContainer]',
5 | standalone: true,
6 | host: {
7 | class:
8 | 'w-full mx-auto px-4 sm:px-8 flex flex-1 items-start md:grid md:grid-cols-[220px_minmax(0,1fr)] lg:grid-cols-[240px_minmax(0,1fr)] md:gap-6 lg:gap-10',
9 | },
10 | })
11 | export class ContainerDirective {}
12 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/layout/main-section.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 |
3 | @Directive({
4 | selector: '[spartanMainSection]',
5 | standalone: true,
6 | host: {
7 | class: 'flex flex-col p-1 sm:p-0 w-full min-h-[calc(100vh-3.5rem)]',
8 | },
9 | })
10 | export class MainSectionDirective {}
11 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/layout/page-bottom-nav-placeholder.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'spartan-page-bottom-nav-placeholder',
5 | standalone: true,
6 | template: '',
7 | })
8 | export class PageBottomNavPlaceholderComponent {}
9 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/layout/page-bottom-nav/page-bottom-nav.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'spartan-page-bottom-nav',
5 | standalone: true,
6 | host: {
7 | class: 'mt-12 flex flex-row-reverse items-center justify-between',
8 | },
9 | template: `
10 |
11 | `,
12 | })
13 | export class PageBottomNavComponent {}
14 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/layout/section-intro.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, Input } from '@angular/core';
2 | import { hlmLead } from '@spartan-ng/helm/typography';
3 |
4 | @Component({
5 | selector: 'spartan-section-intro',
6 | standalone: true,
7 | host: {
8 | class: 'mb-8 block space-y-2',
9 | },
10 | template: `
11 | {{ name }}
12 | {{ lead }}
13 | `,
14 | })
15 | export class SectionIntroComponent {
16 | @Input()
17 | public name = '';
18 | @Input()
19 | public lead = '';
20 | }
21 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/layout/side-nav/side-nav-coming-soon.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'spartan-side-nav-cs',
5 | host: {
6 | class: 'inline-block',
7 | },
8 | template: `
9 | soon
10 | `,
11 | })
12 | export class SideNavComponent {}
13 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/layout/side-nav/side-nav-heading.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 |
3 | @Directive({
4 | selector: '[spartanSideNavHeading]',
5 | standalone: true,
6 | host: {
7 | class: 'flex items-center justify-between mb-1 rounded-md px-2 py-1 font-semibold',
8 | },
9 | })
10 | export class SideNavHeadingDirective {}
11 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/layout/side-nav/side-nav-links.directive.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'spartan-side-nav-links',
5 | standalone: true,
6 | host: {
7 | tabindex: '-1',
8 | class: 'grid grid-flow-row auto-rows-max',
9 | },
10 | template: '',
11 | })
12 | export class SideNavLinksComponent {}
13 |
--------------------------------------------------------------------------------
/apps/app/src/app/shared/typography/link.ts:
--------------------------------------------------------------------------------
1 | export const link = 'h-6 underline text-base px-0.5';
2 |
--------------------------------------------------------------------------------
/apps/app/src/main.ts:
--------------------------------------------------------------------------------
1 | import { bootstrapApplication } from '@angular/platform-browser';
2 | import 'zone.js';
3 |
4 | import { appConfig } from './app.config';
5 | import { AppComponent } from './app/app.component';
6 |
7 | bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
8 |
--------------------------------------------------------------------------------
/apps/app/src/public/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spartan-ng/spartan/96aa303eef52309cdbd957bb21d178b37b76319d/apps/app/src/public/assets/.gitkeep
--------------------------------------------------------------------------------
/apps/app/src/public/assets/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spartan-ng/spartan/96aa303eef52309cdbd957bb21d178b37b76319d/apps/app/src/public/assets/avatar.png
--------------------------------------------------------------------------------
/apps/app/src/public/assets/mountains.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spartan-ng/spartan/96aa303eef52309cdbd957bb21d178b37b76319d/apps/app/src/public/assets/mountains.jpg
--------------------------------------------------------------------------------
/apps/app/src/public/assets/og-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spartan-ng/spartan/96aa303eef52309cdbd957bb21d178b37b76319d/apps/app/src/public/assets/og-image.png
--------------------------------------------------------------------------------
/apps/app/src/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Allow: /
3 |
4 | sitemap: http://localhost:4200/sitemap.xml
5 |
--------------------------------------------------------------------------------
/apps/app/src/server/routes/primitive-api.get.ts:
--------------------------------------------------------------------------------
1 | import { defineEventHandler } from 'h3';
2 | import docsData from '../../public/data/ui-api.json';
3 |
4 | export default defineEventHandler(() => {
5 | return docsData;
6 | });
7 |
--------------------------------------------------------------------------------
/apps/app/src/server/routes/trpc/[trpc].ts:
--------------------------------------------------------------------------------
1 | import { createTrpcNitroHandler } from '@spartan-ng/trpc';
2 | import { createContext } from '../../trpc/context';
3 | import { appRouter } from '../../trpc/routers';
4 | // export API handler
5 | export default createTrpcNitroHandler({
6 | router: appRouter,
7 | createContext,
8 | });
9 |
--------------------------------------------------------------------------------
/apps/app/src/server/trpc/context.ts:
--------------------------------------------------------------------------------
1 | import type { inferAsyncReturnType } from '@trpc/server';
2 | /**
3 | * Creates context for an incoming request
4 | * @link https://trpc.io/docs/context
5 | */
6 | export const createContext = () => ({});
7 | export type Context = inferAsyncReturnType;
8 |
--------------------------------------------------------------------------------
/apps/app/src/server/trpc/routers/index.ts:
--------------------------------------------------------------------------------
1 | import { router } from '../trpc';
2 | import { noteRouter } from './notes';
3 |
4 | export const appRouter = router({
5 | note: noteRouter,
6 | });
7 | // export type definition of API
8 | export type AppRouter = typeof appRouter;
9 |
--------------------------------------------------------------------------------
/apps/app/src/server/trpc/trpc.ts:
--------------------------------------------------------------------------------
1 | import { initTRPC } from '@trpc/server';
2 | import superjson from 'superjson';
3 | import type { Context } from './context';
4 |
5 | const t = initTRPC.context().create({
6 | transformer: superjson,
7 | });
8 | /**
9 | * Unprotected procedure
10 | **/
11 | export const publicProcedure = t.procedure;
12 | export const router = t.router;
13 | export const middleware = t.middleware;
14 |
--------------------------------------------------------------------------------
/apps/app/src/test-setup.ts:
--------------------------------------------------------------------------------
1 | import '@analogjs/vite-plugin-angular/setup-vitest';
2 |
3 | import { getTestBed } from '@angular/core/testing';
4 | import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
5 |
6 | getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
7 |
--------------------------------------------------------------------------------
/apps/app/src/trpc-client.ts:
--------------------------------------------------------------------------------
1 | import { inject } from '@angular/core';
2 | import { createTrpcClient } from '@spartan-ng/trpc';
3 | import superjson from 'superjson';
4 | import type { AppRouter } from './server/trpc/routers';
5 |
6 | export const { provideTrpcClient, tRPCClient } = createTrpcClient({
7 | url: '/api/trpc',
8 | options: {
9 | transformer: superjson,
10 | },
11 | });
12 |
13 | export function injectTRPCClient() {
14 | return inject(tRPCClient);
15 | }
16 |
--------------------------------------------------------------------------------
/apps/app/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/apps/app/tailwind.config.cjs:
--------------------------------------------------------------------------------
1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind');
2 | const { join } = require('node:path');
3 |
4 | /** @type {import('tailwindcss').Config} */
5 | module.exports = {
6 | darkMode: 'class',
7 | presets: [require('../../libs/brain/hlm-tailwind-preset.js')],
8 | content: [
9 | join(__dirname, 'index.html'),
10 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'),
11 | ...createGlobPatternsForDependencies(__dirname),
12 | ],
13 | };
14 |
--------------------------------------------------------------------------------
/apps/app/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "types": ["node"],
6 | "target": "ES2022",
7 | "useDefineForClassFields": false,
8 | "resolveJsonModule": true
9 | },
10 | "files": ["src/main.ts", "src/main.server.ts"],
11 | "include": ["src/**/*.d.ts", "src/app/routes/**/*.ts", "src/app/pages/**/*.page.ts"],
12 | "exclude": ["**/*.test.ts", "**/*.spec.ts"]
13 | }
14 |
--------------------------------------------------------------------------------
/apps/app/tsconfig.editor.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "include": ["**/*.ts"],
4 | "compilerOptions": {
5 | "types": ["node", "vitest/globals"]
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/apps/app/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "types": ["node", "vitest/globals"]
6 | },
7 | "files": ["src/test-setup.ts"],
8 | "include": ["src/**/*.spec.ts", "**/*.d.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/apps/trpc-app-e2e/eslint.config.cjs:
--------------------------------------------------------------------------------
1 | const cypress = require('eslint-plugin-cypress/flat');
2 | const baseConfig = require('../../eslint.config.cjs');
3 |
4 | module.exports = [
5 | cypress.configs['recommended'],
6 | ...baseConfig,
7 | {
8 | files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
9 | rules: {
10 | '@angular-eslint/prefer-output-readonly': 'off',
11 | '@angular-eslint/prefer-on-push-component-change-detection': 'off',
12 | },
13 | },
14 | ];
15 |
--------------------------------------------------------------------------------
/apps/trpc-app-e2e/tests/fixtures/notes.ts:
--------------------------------------------------------------------------------
1 | type Note = {
2 | note: string;
3 | };
4 |
5 | export const notes: Record<'first', Note> = {
6 | first: {
7 | note: 'I am the first note',
8 | },
9 | } as const;
10 |
--------------------------------------------------------------------------------
/apps/trpc-app-e2e/vite.config.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | import { defineConfig } from 'vite';
4 |
5 | // https://vitejs.dev/config/
6 | export default defineConfig(({ mode }) => {
7 | return {
8 | root: __dirname,
9 | test: {
10 | globals: true,
11 | environment: 'node',
12 | include: ['**/*.spec.ts'],
13 | cache: {
14 | dir: '../../node_modules/.vitest',
15 | },
16 | },
17 | define: {
18 | 'import.meta.vitest': mode !== 'production',
19 | },
20 | };
21 | });
22 |
--------------------------------------------------------------------------------
/apps/ui-storybook-e2e/cypress.config.cjs:
--------------------------------------------------------------------------------
1 | const { nxE2EStorybookPreset } = require('@nx/storybook/presets/cypress');
2 | const { defineConfig } = require('cypress');
3 |
4 | module.exports = defineConfig({
5 | e2e: {
6 | ...nxE2EStorybookPreset(__dirname),
7 | // Please ensure you use `cy.origin()` when navigating between domains and remove this option.
8 | // See https://docs.cypress.io/app/references/migration-guide#Changes-to-cyorigin
9 | injectDocumentDomain: true,
10 | experimentalRunAllSpecs: true,
11 | },
12 | });
13 |
--------------------------------------------------------------------------------
/apps/ui-storybook-e2e/eslint.config.cjs:
--------------------------------------------------------------------------------
1 | const cypress = require('eslint-plugin-cypress/flat');
2 | const baseConfig = require('../../eslint.config.cjs');
3 |
4 | module.exports = [
5 | cypress.configs['recommended'],
6 |
7 | ...baseConfig,
8 | {
9 | // Override or add rules here
10 | files: ['**/*.ts'],
11 | rules: {
12 | '@angular-eslint/prefer-output-readonly': 'off',
13 | '@angular-eslint/prefer-on-push-component-change-detection': 'off',
14 | },
15 | },
16 | ];
17 |
--------------------------------------------------------------------------------
/apps/ui-storybook-e2e/src/fixtures/example.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Using fixtures to represent data",
3 | "email": "hello@cypress.io"
4 | }
5 |
--------------------------------------------------------------------------------
/apps/ui-storybook-e2e/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base.json",
3 | "compilerOptions": {
4 | "sourceMap": false,
5 | "outDir": "../../dist/out-tsc",
6 | "allowJs": true,
7 | "types": ["cypress", "node", "@testing-library/cypress", "cypress-real-events"]
8 | },
9 | "include": ["src/**/*.ts", "src/**/*.js", "cypress.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/apps/ui-storybook/.storybook/preview.js:
--------------------------------------------------------------------------------
1 | import { withThemeByClassName } from '@storybook/addon-themes';
2 |
3 | export const decorators = [
4 | withThemeByClassName({
5 | themes: {
6 | light: 'light',
7 | dark: 'dark',
8 | },
9 | defaultTheme: 'light',
10 | }),
11 | ];
12 |
13 | const preview = {
14 | decorators,
15 |
16 | parameters: {
17 | options: {
18 | storySort: {
19 | method: 'alphabetical',
20 | },
21 | },
22 | },
23 |
24 | tags: ['autodocs'],
25 | };
26 |
27 | export default preview;
28 |
--------------------------------------------------------------------------------
/apps/ui-storybook/.storybook/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "emitDecoratorMetadata": true
5 | },
6 |
7 | "exclude": ["../**/*.spec.ts"],
8 | "include": [
9 | "../**/*.stories.ts",
10 | "../**/*.stories.js",
11 | "../**/*.stories.jsx",
12 | "../**/*.stories.tsx",
13 | "../**/*.stories.mdx",
14 | "*.js"
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/apps/ui-storybook/README.md:
--------------------------------------------------------------------------------
1 | # ui-storybook
2 |
3 | This library was generated with [Nx](https://nx.dev).
4 |
5 | ## Running Storybook
6 |
7 | Run `nx storybook ui-storybook` to execute the unit tests.
8 |
--------------------------------------------------------------------------------
/apps/ui-storybook/postcss.config.js:
--------------------------------------------------------------------------------
1 | const { join } = require('node:path');
2 |
3 | module.exports = {
4 | plugins: {
5 | tailwindcss: {
6 | config: join(__dirname, 'tailwind.config.js'),
7 | },
8 | autoprefixer: {},
9 | },
10 | };
11 |
--------------------------------------------------------------------------------
/apps/ui-storybook/public/mountains.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spartan-ng/spartan/96aa303eef52309cdbd957bb21d178b37b76319d/apps/ui-storybook/public/mountains.jpg
--------------------------------------------------------------------------------
/apps/ui-storybook/src/index.ts:
--------------------------------------------------------------------------------
1 | // placeholder as this project is simply a wrapper for
2 | // running storybook for all ui primitives
3 |
4 | console.log('I should not be an empty file!');
5 |
--------------------------------------------------------------------------------
/apps/ui-storybook/tailwind.config.js:
--------------------------------------------------------------------------------
1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind');
2 | const { join } = require('node:path');
3 |
4 | /** @type {import('tailwindcss').Config} */
5 | module.exports = {
6 | darkMode: ['class', '[data-mode="dark"]'],
7 | presets: [require('../../libs/brain/hlm-tailwind-preset.js')],
8 | content: [join(__dirname, '../**/!(*.spec).{ts,html}'), ...createGlobPatternsForDependencies(__dirname)],
9 | theme: {
10 | extend: {},
11 | },
12 | plugins: [],
13 | };
14 |
--------------------------------------------------------------------------------
/apps/ui-storybook/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "declaration": true,
6 | "declarationMap": true,
7 | "inlineSources": true,
8 | "types": []
9 | },
10 | "exclude": [
11 | "src/**/*.spec.ts",
12 | "src/test-setup.ts",
13 | "jest.config.ts",
14 | "src/**/*.test.ts",
15 | "**/*.stories.ts",
16 | "**/*.stories.js"
17 | ],
18 | "include": ["**/*.ts"]
19 | }
20 |
--------------------------------------------------------------------------------
/jest.config.ts:
--------------------------------------------------------------------------------
1 | import { getJestProjectsAsync } from '@nx/jest';
2 |
3 | export default async () => ({
4 | projects: await getJestProjectsAsync(),
5 | });
6 |
--------------------------------------------------------------------------------
/jest.preset.cjs:
--------------------------------------------------------------------------------
1 | const nxPreset = require('@nx/jest/preset').default;
2 |
3 | module.exports = { ...nxPreset };
4 |
--------------------------------------------------------------------------------
/libs/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spartan-ng/spartan/96aa303eef52309cdbd957bb21d178b37b76319d/libs/.gitkeep
--------------------------------------------------------------------------------
/libs/brain/README.md:
--------------------------------------------------------------------------------
1 | # brain
2 |
3 | This library was generated with [Nx](https://nx.dev).
4 |
5 | ## Running unit tests
6 |
7 | Run `nx test brain` to execute the unit tests.
8 |
--------------------------------------------------------------------------------
/libs/brain/accordion/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/accordion
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/accordion`.
4 |
--------------------------------------------------------------------------------
/libs/brain/accordion/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/alert-dialog/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/alert-dialog
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/alert-dialog`.
4 |
--------------------------------------------------------------------------------
/libs/brain/alert-dialog/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/alert-dialog/src/lib/brn-alert-dialog-content.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { provideExposesStateProviderExisting } from '@spartan-ng/brain/core';
3 | import { BrnDialogContentDirective } from '@spartan-ng/brain/dialog';
4 |
5 | @Directive({
6 | selector: '[brnAlertDialogContent]',
7 | standalone: true,
8 | providers: [provideExposesStateProviderExisting(() => BrnAlertDialogContentDirective)],
9 | })
10 | export class BrnAlertDialogContentDirective extends BrnDialogContentDirective {}
11 |
--------------------------------------------------------------------------------
/libs/brain/alert-dialog/src/lib/brn-alert-dialog-description.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { BrnDialogDescriptionDirective } from '@spartan-ng/brain/dialog';
3 |
4 | @Directive({
5 | selector: '[brnAlertDialogDescription]',
6 | standalone: true,
7 | host: {
8 | '[id]': '_id()',
9 | },
10 | })
11 | export class BrnAlertDialogDescriptionDirective extends BrnDialogDescriptionDirective {}
12 |
--------------------------------------------------------------------------------
/libs/brain/alert-dialog/src/lib/brn-alert-dialog-title.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { BrnDialogTitleDirective } from '@spartan-ng/brain/dialog';
3 |
4 | @Directive({
5 | selector: '[brnAlertDialogTitle]',
6 | standalone: true,
7 | host: {
8 | '[id]': '_id()',
9 | },
10 | })
11 | export class BrnAlertDialogTitleDirective extends BrnDialogTitleDirective {}
12 |
--------------------------------------------------------------------------------
/libs/brain/avatar/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/avatar
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/avatar`.
4 |
--------------------------------------------------------------------------------
/libs/brain/avatar/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/avatar/src/lib/fallback/index.ts:
--------------------------------------------------------------------------------
1 | export * from './brn-avatar-fallback.directive';
2 |
--------------------------------------------------------------------------------
/libs/brain/avatar/src/lib/image/brn-avatar-image.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, HostListener, computed, signal } from '@angular/core';
2 |
3 | @Directive({
4 | selector: 'img[brnAvatarImage]',
5 | standalone: true,
6 | exportAs: 'avatarImage',
7 | })
8 | export class BrnAvatarImageDirective {
9 | private readonly _loaded = signal(false);
10 |
11 | @HostListener('error')
12 | private onError() {
13 | this._loaded.set(false);
14 | }
15 |
16 | @HostListener('load')
17 | private onLoad() {
18 | this._loaded.set(true);
19 | }
20 |
21 | public canShow = computed(() => this._loaded());
22 | }
23 |
--------------------------------------------------------------------------------
/libs/brain/avatar/src/lib/image/index.ts:
--------------------------------------------------------------------------------
1 | export * from './brn-avatar-image.directive';
2 |
--------------------------------------------------------------------------------
/libs/brain/avatar/src/lib/util/index.ts:
--------------------------------------------------------------------------------
1 | export * from './hex-color-for';
2 | export * from './initials.pipe';
3 | export * from './is-bright';
4 |
--------------------------------------------------------------------------------
/libs/brain/avatar/src/lib/util/is-bright.ts:
--------------------------------------------------------------------------------
1 | const isShortHand = (hex: string) => hex.length === 3;
2 |
3 | const cleanup = (hex: string) => {
4 | const noHash = hex.replace('#', '').trim().toLowerCase();
5 |
6 | if (!isShortHand(noHash)) return noHash;
7 |
8 | return noHash
9 | .split('')
10 | .map((char) => char + char)
11 | .join('');
12 | };
13 |
14 | export const isBright = (hex: string) => Number.parseInt(cleanup(hex), 16) > 0xffffff / 1.25;
15 |
--------------------------------------------------------------------------------
/libs/brain/calendar/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/calendar
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/calendar`.
4 |
--------------------------------------------------------------------------------
/libs/brain/calendar/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/calendar/src/lib/brn-calendar-cell.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 |
3 | @Directive({
4 | selector: '[brnCalendarCell]',
5 | standalone: true,
6 | host: {
7 | role: 'presentation',
8 | },
9 | })
10 | export class BrnCalendarCellDirective {}
11 |
--------------------------------------------------------------------------------
/libs/brain/calendar/src/lib/brn-calendar-grid.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { injectBrnCalendar } from './brn-calendar.token';
3 |
4 | @Directive({
5 | selector: '[brnCalendarGrid]',
6 | standalone: true,
7 | host: {
8 | role: 'grid',
9 | '[attr.aria-labelledby]': 'calendar.header()?.id()',
10 | },
11 | })
12 | export class BrnCalendarGridDirective {
13 | /** Access the calendar component */
14 | protected readonly calendar = injectBrnCalendar();
15 | }
16 |
--------------------------------------------------------------------------------
/libs/brain/calendar/src/lib/brn-calendar-header.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, input } from '@angular/core';
2 |
3 | let uniqueId = 0;
4 |
5 | @Directive({
6 | selector: '[brnCalendarHeader]',
7 | standalone: true,
8 | host: {
9 | '[id]': 'id()',
10 | 'aria-live': 'polite',
11 | role: 'presentation',
12 | },
13 | })
14 | export class BrnCalendarHeaderDirective {
15 | /** The unique id for the header */
16 | public readonly id = input(`brn-calendar-header-${uniqueId++}`);
17 | }
18 |
--------------------------------------------------------------------------------
/libs/brain/checkbox/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/checkbox
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/checkbox`.
4 |
--------------------------------------------------------------------------------
/libs/brain/checkbox/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/checkbox/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { BrnCheckboxComponent } from './lib/brn-checkbox.component';
4 |
5 | export * from './lib/brn-checkbox.component';
6 |
7 | export const BrnCheckboxImports = [BrnCheckboxComponent] as const;
8 |
9 | @NgModule({
10 | imports: [...BrnCheckboxImports],
11 | exports: [...BrnCheckboxImports],
12 | })
13 | export class BrnCheckboxModule {}
14 |
--------------------------------------------------------------------------------
/libs/brain/collapsible/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/collapsible
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/collapsible`.
4 |
--------------------------------------------------------------------------------
/libs/brain/collapsible/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/command/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/command
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/command`.
4 |
--------------------------------------------------------------------------------
/libs/brain/command/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/command/src/lib/brn-command-item.token.ts:
--------------------------------------------------------------------------------
1 | import { ExistingProvider, InjectionToken, Type } from '@angular/core';
2 | import type { BrnCommandItemDirective } from './brn-command-item.directive';
3 |
4 | export const BrnCommandItemToken = new InjectionToken('BrnCommandItemToken');
5 |
6 | export function provideBrnCommandItem(command: Type): ExistingProvider {
7 | return { provide: BrnCommandItemToken, useExisting: command };
8 | }
9 |
--------------------------------------------------------------------------------
/libs/brain/command/src/lib/brn-command-list.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, input } from '@angular/core';
2 |
3 | @Directive({
4 | standalone: true,
5 | selector: '[brnCommandList]',
6 | host: {
7 | role: 'listbox',
8 | '[id]': 'id()',
9 | },
10 | })
11 | export class BrnCommandListDirective {
12 | private static _id = 0;
13 |
14 | /** The id of the command list */
15 | public readonly id = input(`brn-command-list-${BrnCommandListDirective._id++}`);
16 | }
17 |
--------------------------------------------------------------------------------
/libs/brain/command/src/lib/brn-command-search-input.token.ts:
--------------------------------------------------------------------------------
1 | import { ExistingProvider, InjectionToken, Type } from '@angular/core';
2 | import type { BrnCommandSearchInputDirective } from './brn-command-search-input.directive';
3 |
4 | export const BrnCommandSearchInputToken = new InjectionToken(
5 | 'BrnCommandSearchInputToken',
6 | );
7 |
8 | export function provideBrnCommandSearchInput(command: Type): ExistingProvider {
9 | return { provide: BrnCommandSearchInputToken, useExisting: command };
10 | }
11 |
--------------------------------------------------------------------------------
/libs/brain/command/src/lib/brn-command.token.ts:
--------------------------------------------------------------------------------
1 | import { ExistingProvider, inject, InjectionToken, Type } from '@angular/core';
2 | import type { BrnCommandDirective } from './brn-command.directive';
3 |
4 | export const BrnCommandToken = new InjectionToken('BrnCommandToken');
5 |
6 | export function provideBrnCommand(command: Type): ExistingProvider {
7 | return { provide: BrnCommandToken, useExisting: command };
8 | }
9 |
10 | export function injectBrnCommand(): BrnCommandDirective {
11 | return inject(BrnCommandToken);
12 | }
13 |
--------------------------------------------------------------------------------
/libs/brain/core/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/core
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/core`.
4 |
--------------------------------------------------------------------------------
/libs/brain/core/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/core/src/helpers/custom-element-class-settable.ts:
--------------------------------------------------------------------------------
1 | import { createInjectionToken } from './create-injection-token';
2 |
3 | export interface CustomElementClassSettable {
4 | setClassToCustomElement: (newClass: string) => void;
5 | }
6 |
7 | export const [
8 | injectCustomClassSettable,
9 | provideCustomClassSettable,
10 | provideCustomClassSettableExisting,
11 | SET_CLASS_TO_CUSTOM_ELEMENT_TOKEN,
12 | ] = createInjectionToken('@spartan-ng SET_CLASS_TO_CUSTOM_ELEMENT_TOKEN');
13 |
--------------------------------------------------------------------------------
/libs/brain/core/src/helpers/dev-mode.ts:
--------------------------------------------------------------------------------
1 | declare const ngDevMode: boolean;
2 | /**
3 | * Set by Angular to true when in development mode.
4 | * Allows for tree-shaking code that is only used in development.
5 | */
6 | export const brnDevMode = ngDevMode;
7 |
--------------------------------------------------------------------------------
/libs/brain/core/src/helpers/exposes-side.ts:
--------------------------------------------------------------------------------
1 | import type { Signal } from '@angular/core';
2 | import { createInjectionToken } from './create-injection-token';
3 |
4 | export interface ExposesSide {
5 | side: Signal<'top' | 'bottom' | 'left' | 'right'>;
6 | }
7 |
8 | export const [
9 | injectExposedSideProvider,
10 | provideExposedSideProvider,
11 | provideExposedSideProviderExisting,
12 | EXPOSES_SIDE_TOKEN,
13 | ] = createInjectionToken('@spartan-ng EXPOSES_SIDE_TOKEN');
14 |
--------------------------------------------------------------------------------
/libs/brain/core/src/helpers/exposes-state.ts:
--------------------------------------------------------------------------------
1 | import type { Signal } from '@angular/core';
2 | import { createInjectionToken } from './create-injection-token';
3 |
4 | export interface ExposesState {
5 | state: Signal<'open' | 'closed'>;
6 | }
7 |
8 | export const [
9 | injectExposesStateProvider,
10 | provideExposesStateProvider,
11 | provideExposesStateProviderExisting,
12 | EXPOSES_STATE_TOKEN,
13 | ] = createInjectionToken('@spartan-ng EXPOSES_STATE_TOKEN');
14 |
--------------------------------------------------------------------------------
/libs/brain/core/src/helpers/hlm.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from 'clsx';
2 | import { twMerge } from 'tailwind-merge';
3 |
4 | export function hlm(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs));
6 | }
7 |
--------------------------------------------------------------------------------
/libs/brain/core/src/helpers/table-classes-settable.ts:
--------------------------------------------------------------------------------
1 | import { createInjectionToken } from './create-injection-token';
2 |
3 | export interface TableClassesSettable {
4 | setTableClasses: (classes: Partial<{ table: string; headerRow: string; bodyRow: string }>) => void;
5 | }
6 |
7 | export const [
8 | injectTableClassesSettable,
9 | provideTableClassesSettable,
10 | provideTableClassesSettableExisting,
11 | SET_TABLE_CLASSES_TOKEN,
12 | ] = createInjectionToken('@spartan-ng SET_TABLE_CLASSES_TOKEN');
13 |
--------------------------------------------------------------------------------
/libs/brain/core/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './helpers/custom-element-class-settable';
2 | export * from './helpers/dev-mode';
3 | export * from './helpers/exposes-side';
4 | export * from './helpers/exposes-state';
5 | export * from './helpers/hlm';
6 | export * from './helpers/table-classes-settable';
7 | export * from './helpers/zone-free';
8 |
--------------------------------------------------------------------------------
/libs/brain/date-time-luxon/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/date-time-luxon
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/date-time-luxon`.
4 |
--------------------------------------------------------------------------------
/libs/brain/date-time-luxon/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/date-time-luxon/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/date-adapter';
2 |
--------------------------------------------------------------------------------
/libs/brain/date-time/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/date-time
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/date-time`.
4 |
--------------------------------------------------------------------------------
/libs/brain/date-time/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/date-time/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/date-adapter';
2 | export * from './lib/native-date-adapter';
3 |
--------------------------------------------------------------------------------
/libs/brain/dialog/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/dialog
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/dialog`.
4 |
--------------------------------------------------------------------------------
/libs/brain/dialog/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/dialog/src/lib/brn-dialog-state.ts:
--------------------------------------------------------------------------------
1 | export type BrnDialogState = 'closed' | 'open';
2 |
--------------------------------------------------------------------------------
/libs/brain/dialog/src/lib/brn-dialog-title.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, effect, inject, signal } from '@angular/core';
2 | import { BrnDialogRef } from './brn-dialog-ref';
3 |
4 | @Directive({
5 | selector: '[brnDialogTitle]',
6 | standalone: true,
7 | host: {
8 | '[id]': '_id()',
9 | },
10 | })
11 | export class BrnDialogTitleDirective {
12 | private readonly _brnDialogRef = inject(BrnDialogRef);
13 |
14 | protected _id = signal(`brn-dialog-title-${this._brnDialogRef?.dialogId}`);
15 |
16 | constructor() {
17 | effect(() => {
18 | this._brnDialogRef.setAriaLabelledBy(this._id());
19 | });
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/libs/brain/dialog/src/lib/brn-dialog-utils.ts:
--------------------------------------------------------------------------------
1 | // brn-dialog-utils.ts
2 |
3 | export const cssClassesToArray = (classes: string | string[] | undefined | null, defaultClass = ''): string[] => {
4 | if (typeof classes === 'string') {
5 | const splitClasses = classes.trim().split(' ');
6 | if (splitClasses.length === 0) {
7 | return [defaultClass];
8 | }
9 | return splitClasses;
10 | }
11 | return classes ?? [];
12 | };
13 |
--------------------------------------------------------------------------------
/libs/brain/form-field/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/form-field
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/form-field`.
4 |
--------------------------------------------------------------------------------
/libs/brain/form-field/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/form-field/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/brn-form-field-control';
2 |
--------------------------------------------------------------------------------
/libs/brain/form-field/src/lib/brn-form-field-control.ts:
--------------------------------------------------------------------------------
1 | import { Directive, type Signal, signal } from '@angular/core';
2 | import type { AbstractControlDirective, NgControl } from '@angular/forms';
3 |
4 | @Directive()
5 | export class BrnFormFieldControl {
6 | /** Gets the AbstractControlDirective for this control. */
7 | public readonly ngControl: NgControl | AbstractControlDirective | null = null;
8 |
9 | /** Whether the control is in an error state. */
10 | public readonly errorState: Signal = signal(false);
11 | }
12 |
--------------------------------------------------------------------------------
/libs/brain/forms/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/forms
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/forms`.
4 |
--------------------------------------------------------------------------------
/libs/brain/forms/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/forms/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/control-value-accessor';
2 | export * from './lib/error-options';
3 | export * from './lib/error-state-tracker';
4 |
--------------------------------------------------------------------------------
/libs/brain/forms/src/lib/control-value-accessor.ts:
--------------------------------------------------------------------------------
1 | export type ChangeFn = (value: T) => void;
2 | export type TouchFn = () => void;
3 |
--------------------------------------------------------------------------------
/libs/brain/hover-card/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/hover-card
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/hover-card`.
4 |
--------------------------------------------------------------------------------
/libs/brain/hover-card/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/input-otp/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/input-otp
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/input-otp`.
4 |
--------------------------------------------------------------------------------
/libs/brain/input-otp/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/input-otp/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { BrnInputOtpSlotComponent } from './lib/brn-input-otp-slot.component';
3 | import { BrnInputOtpComponent } from './lib/brn-input-otp.component';
4 |
5 | export * from './lib/brn-input-otp-slot.component';
6 | export * from './lib/brn-input-otp.component';
7 |
8 | @NgModule({
9 | imports: [BrnInputOtpComponent, BrnInputOtpSlotComponent],
10 | exports: [BrnInputOtpComponent, BrnInputOtpSlotComponent],
11 | })
12 | export class BrnInputOtpModule {}
13 |
--------------------------------------------------------------------------------
/libs/brain/input-otp/src/lib/brn-input-otp.token.ts:
--------------------------------------------------------------------------------
1 | import { ExistingProvider, inject, InjectionToken, Type } from '@angular/core';
2 | import { BrnInputOtpComponent } from './brn-input-otp.component';
3 |
4 | export const BrnInputOtpToken = new InjectionToken('BrnInputOtpToken');
5 |
6 | export function injectBrnInputOtp(): BrnInputOtpComponent {
7 | return inject(BrnInputOtpToken) as BrnInputOtpComponent;
8 | }
9 |
10 | export function provideBrnInputOtp(inputOtp: Type): ExistingProvider {
11 | return { provide: BrnInputOtpToken, useExisting: inputOtp };
12 | }
13 |
--------------------------------------------------------------------------------
/libs/brain/label/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/label
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/label`.
4 |
--------------------------------------------------------------------------------
/libs/brain/label/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/label/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { BrnLabelDirective } from './lib/brn-label.directive';
3 |
4 | export * from './lib/brn-label.directive';
5 |
6 | @NgModule({
7 | imports: [BrnLabelDirective],
8 | exports: [BrnLabelDirective],
9 | })
10 | export class BrnLabelModule {}
11 |
--------------------------------------------------------------------------------
/libs/brain/menu/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/menu
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/menu`.
4 |
--------------------------------------------------------------------------------
/libs/brain/menu/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/menu/src/lib/brn-menu-align.ts:
--------------------------------------------------------------------------------
1 | import { ConnectedPosition } from '@angular/cdk/overlay';
2 |
3 | export type BrnMenuAlign = 'start' | 'center' | 'end' | undefined;
4 | export const getBrnMenuAlign = (align: Exclude): ConnectedPosition[] => [
5 | {
6 | originX: align,
7 | originY: 'bottom',
8 | overlayX: align,
9 | overlayY: 'top',
10 | },
11 | {
12 | originX: align,
13 | originY: 'top',
14 | overlayX: align,
15 | overlayY: 'bottom',
16 | },
17 | ];
18 |
--------------------------------------------------------------------------------
/libs/brain/menu/src/lib/brn-menu-bar.directive.ts:
--------------------------------------------------------------------------------
1 | import { CdkMenuBar } from '@angular/cdk/menu';
2 | import { Directive } from '@angular/core';
3 |
4 | @Directive({
5 | selector: '[brnMenuBar]',
6 | standalone: true,
7 | hostDirectives: [CdkMenuBar],
8 | })
9 | export class BrnMenuBarDirective {}
10 |
--------------------------------------------------------------------------------
/libs/brain/menu/src/lib/brn-menu-group.directive.ts:
--------------------------------------------------------------------------------
1 | import { CdkMenuGroup } from '@angular/cdk/menu';
2 | import { Directive } from '@angular/core';
3 |
4 | @Directive({
5 | selector: '[brnMenuGroup]',
6 | standalone: true,
7 | hostDirectives: [CdkMenuGroup],
8 | })
9 | export class BrnMenuGroupDirective {}
10 |
--------------------------------------------------------------------------------
/libs/brain/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3 | "dest": "../../dist/libs/brain",
4 | "lib": {
5 | "entryFile": "src/index.ts"
6 | },
7 | "assets": ["hlm-tailwind-preset.js", "hlm-tailwind-preset.css"]
8 | }
9 |
--------------------------------------------------------------------------------
/libs/brain/popover/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/popover
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/popover`.
4 |
--------------------------------------------------------------------------------
/libs/brain/popover/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/popover/src/lib/brn-popover-close.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { BrnDialogCloseDirective } from '@spartan-ng/brain/dialog';
3 |
4 | @Directive({
5 | selector: 'button[brnPopoverClose]',
6 | standalone: true,
7 | })
8 | export class BrnPopoverCloseDirective extends BrnDialogCloseDirective {}
9 |
--------------------------------------------------------------------------------
/libs/brain/popover/src/lib/brn-popover-content.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { provideExposesStateProviderExisting } from '@spartan-ng/brain/core';
3 | import { BrnDialogContentDirective } from '@spartan-ng/brain/dialog';
4 |
5 | @Directive({
6 | selector: '[brnPopoverContent]',
7 | standalone: true,
8 | providers: [provideExposesStateProviderExisting(() => BrnPopoverContentDirective)],
9 | })
10 | export class BrnPopoverContentDirective extends BrnDialogContentDirective {}
11 |
--------------------------------------------------------------------------------
/libs/brain/progress/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/progress
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/progress`.
4 |
--------------------------------------------------------------------------------
/libs/brain/progress/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/progress/src/lib/brn-progress-indicator.component.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component } from '@angular/core';
2 | import { injectBrnProgress } from './brn-progress.token';
3 |
4 | @Component({
5 | selector: 'brn-progress-indicator',
6 | standalone: true,
7 | template: '',
8 | host: {
9 | '[attr.data-state]': 'progress.state()',
10 | '[attr.data-value]': 'progress.value()',
11 | '[attr.data-max]': 'progress.max()',
12 | },
13 | changeDetection: ChangeDetectionStrategy.OnPush,
14 | })
15 | export class BrnProgressIndicatorComponent {
16 | protected readonly progress = injectBrnProgress();
17 | }
18 |
--------------------------------------------------------------------------------
/libs/brain/progress/src/lib/brn-progress.token.ts:
--------------------------------------------------------------------------------
1 | import { ExistingProvider, InjectionToken, Type, inject } from '@angular/core';
2 | import type { BrnProgressComponent } from './brn-progress.component';
3 |
4 | const BrnProgressToken = new InjectionToken('BrnProgressComponent');
5 |
6 | export function provideBrnProgress(progress: Type): ExistingProvider {
7 | return { provide: BrnProgressToken, useExisting: progress };
8 | }
9 |
10 | export function injectBrnProgress(): BrnProgressComponent {
11 | return inject(BrnProgressToken);
12 | }
13 |
--------------------------------------------------------------------------------
/libs/brain/radio-group/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/radio-group
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/radio-group`.
4 |
--------------------------------------------------------------------------------
/libs/brain/radio-group/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/radio-group/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { BrnRadioGroupDirective } from './lib/brn-radio-group.directive';
4 | import { BrnRadioComponent } from './lib/brn-radio.component';
5 |
6 | export * from './lib/brn-radio-group.directive';
7 | export * from './lib/brn-radio.component';
8 |
9 | export const BrnRadioGroupImports = [BrnRadioGroupDirective, BrnRadioComponent] as const;
10 |
11 | @NgModule({
12 | imports: [...BrnRadioGroupImports],
13 | exports: [...BrnRadioGroupImports],
14 | })
15 | export class BrnRadioGroupModule {}
16 |
--------------------------------------------------------------------------------
/libs/brain/select/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/select
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/select`.
4 |
--------------------------------------------------------------------------------
/libs/brain/select/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/select/src/lib/brn-select-group.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, signal } from '@angular/core';
2 |
3 | @Directive({
4 | selector: '[brnSelectGroup]',
5 | standalone: true,
6 | host: {
7 | role: 'group',
8 | '[attr.aria-labelledby]': 'labelledBy()',
9 | },
10 | })
11 | export class BrnSelectGroupDirective {
12 | public readonly labelledBy = signal('');
13 | }
14 |
--------------------------------------------------------------------------------
/libs/brain/select/src/lib/brn-select-placeholder.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, inject, TemplateRef } from '@angular/core';
2 |
3 | @Directive({
4 | standalone: true,
5 | selector: '[brnSelectPlaceholder], [hlmSelectPlaceholder]',
6 | })
7 | export class BrnSelectPlaceholderDirective {
8 | /** @internale */
9 | public readonly templateRef = inject>(TemplateRef);
10 | }
11 |
--------------------------------------------------------------------------------
/libs/brain/select/src/lib/brn-select-value.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, inject, TemplateRef } from '@angular/core';
2 |
3 | @Directive({
4 | standalone: true,
5 | selector: '[brnSelectValue], [hlmSelectValue]',
6 | })
7 | export class BrnSelectValueDirective {
8 | /** @internale */
9 | public readonly templateRef = inject>>(TemplateRef);
10 | }
11 |
12 | export interface BrnSelectValueContext {
13 | $implicit: T | T[];
14 | }
15 |
--------------------------------------------------------------------------------
/libs/brain/select/src/lib/brn-select.token.ts:
--------------------------------------------------------------------------------
1 | import { ExistingProvider, inject, InjectionToken, Type } from '@angular/core';
2 | import type { BrnSelectComponent } from './brn-select.component';
3 |
4 | const BrnSelectToken = new InjectionToken('BrnSelectToken');
5 |
6 | export function injectBrnSelect(): BrnSelectComponent {
7 | return inject(BrnSelectToken) as BrnSelectComponent;
8 | }
9 |
10 | export function provideBrnSelect(select: Type): ExistingProvider {
11 | return { provide: BrnSelectToken, useExisting: select };
12 | }
13 |
--------------------------------------------------------------------------------
/libs/brain/separator/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/separator
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/separator`.
4 |
--------------------------------------------------------------------------------
/libs/brain/separator/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/separator/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { BrnSeparatorComponent } from './lib/brn-separator.component';
3 |
4 | export * from './lib/brn-separator.component';
5 |
6 | @NgModule({
7 | imports: [BrnSeparatorComponent],
8 | exports: [BrnSeparatorComponent],
9 | })
10 | export class BrnSeparatorModule {}
11 |
--------------------------------------------------------------------------------
/libs/brain/sheet/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/sheet
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/sheet`.
4 |
--------------------------------------------------------------------------------
/libs/brain/sheet/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/sheet/src/lib/brn-sheet-close.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { BrnDialogCloseDirective } from '@spartan-ng/brain/dialog';
3 |
4 | @Directive({
5 | selector: 'button[brnSheetClose]',
6 | standalone: true,
7 | })
8 | export class BrnSheetCloseDirective extends BrnDialogCloseDirective {}
9 |
--------------------------------------------------------------------------------
/libs/brain/sheet/src/lib/brn-sheet-description.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { BrnDialogDescriptionDirective } from '@spartan-ng/brain/dialog';
3 |
4 | @Directive({
5 | selector: '[brnSheetDescription]',
6 | standalone: true,
7 | host: {
8 | '[id]': '_id()',
9 | },
10 | })
11 | export class BrnSheetDescriptionDirective extends BrnDialogDescriptionDirective {}
12 |
--------------------------------------------------------------------------------
/libs/brain/sheet/src/lib/brn-sheet-title.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { BrnDialogTitleDirective } from '@spartan-ng/brain/dialog';
3 |
4 | @Directive({
5 | selector: '[brnSheetTitle]',
6 | standalone: true,
7 | host: {
8 | '[id]': '_id()',
9 | },
10 | })
11 | export class BrnSheetTitleDirective extends BrnDialogTitleDirective {}
12 |
--------------------------------------------------------------------------------
/libs/brain/slider/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/slider
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/slider`.
4 |
--------------------------------------------------------------------------------
/libs/brain/slider/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/slider/src/lib/brn-slider-range.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { injectBrnSlider } from './brn-slider.token';
3 |
4 | @Directive({
5 | selector: '[brnSliderRange]',
6 | host: {
7 | '[attr.data-disabled]': 'slider.disabled()',
8 | '[style.width.%]': 'slider.percentage()',
9 | },
10 | })
11 | export class BrnSliderRangeDirective {
12 | /** Access the slider */
13 | protected readonly slider = injectBrnSlider();
14 | }
15 |
--------------------------------------------------------------------------------
/libs/brain/slider/src/lib/brn-slider-track.token.ts:
--------------------------------------------------------------------------------
1 | import { ExistingProvider, inject, InjectionToken, Type } from '@angular/core';
2 | import type { BrnSliderTrackDirective } from './brn-slider-track.directive';
3 |
4 | export const BrnSliderTrackToken = new InjectionToken('BrnSliderTrackToken');
5 |
6 | export function provideBrnSliderTrack(slider: Type): ExistingProvider {
7 | return { provide: BrnSliderTrackToken, useExisting: slider };
8 | }
9 |
10 | export function injectBrnSliderTrack(): BrnSliderTrackDirective {
11 | return inject(BrnSliderTrackToken);
12 | }
13 |
--------------------------------------------------------------------------------
/libs/brain/slider/src/lib/brn-slider.token.ts:
--------------------------------------------------------------------------------
1 | import { ExistingProvider, inject, InjectionToken, Type } from '@angular/core';
2 | import type { BrnSliderDirective } from './brn-slider.directive';
3 |
4 | const BrnSliderToken = new InjectionToken('BrnSliderToken');
5 |
6 | export function provideBrnSlider(slider: Type): ExistingProvider {
7 | return { provide: BrnSliderToken, useExisting: slider };
8 | }
9 |
10 | export function injectBrnSlider(): BrnSliderDirective {
11 | return inject(BrnSliderToken);
12 | }
13 |
--------------------------------------------------------------------------------
/libs/brain/src/index.ts:
--------------------------------------------------------------------------------
1 | // this file can't be empty, otherwise the build will fail
2 | export default true;
3 |
--------------------------------------------------------------------------------
/libs/brain/src/test-setup.ts:
--------------------------------------------------------------------------------
1 | import '@testing-library/jest-dom';
2 | import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
3 |
4 | setupZoneTestEnv();
5 |
6 | import { toHaveNoViolations } from 'jest-axe';
7 |
8 | expect.extend(toHaveNoViolations);
9 |
--------------------------------------------------------------------------------
/libs/brain/switch/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/switch
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/switch`.
4 |
--------------------------------------------------------------------------------
/libs/brain/switch/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/switch/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { BrnSwitchThumbComponent } from './lib/brn-switch-thumb.component';
4 | import { BrnSwitchComponent } from './lib/brn-switch.component';
5 |
6 | export * from './lib/brn-switch-thumb.component';
7 | export * from './lib/brn-switch.component';
8 |
9 | export const BrnSwitchImports = [BrnSwitchComponent, BrnSwitchThumbComponent] as const;
10 |
11 | @NgModule({
12 | imports: [...BrnSwitchImports],
13 | exports: [...BrnSwitchImports],
14 | })
15 | export class BrnSwitchModule {}
16 |
--------------------------------------------------------------------------------
/libs/brain/switch/src/lib/brn-switch-thumb.component.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'brn-switch-thumb',
5 | template: '',
6 | host: {
7 | role: 'presentation',
8 | '(click)': '$event.preventDefault()',
9 | },
10 | changeDetection: ChangeDetectionStrategy.OnPush,
11 | })
12 | export class BrnSwitchThumbComponent {}
13 |
--------------------------------------------------------------------------------
/libs/brain/table/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/table
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/table`.
4 |
--------------------------------------------------------------------------------
/libs/brain/table/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/table/src/lib/brn-cell-def.directive.ts:
--------------------------------------------------------------------------------
1 | import { CdkCellDef } from '@angular/cdk/table';
2 | import { Directive, TemplateRef, inject } from '@angular/core';
3 |
4 | @Directive({
5 | standalone: true,
6 | selector: '[brnCellDef]',
7 | exportAs: 'brnCellDef',
8 | })
9 | export class BrnCellDefDirective extends CdkCellDef {
10 | public override template: TemplateRef;
11 |
12 | constructor() {
13 | const template = inject>(TemplateRef);
14 |
15 | super(template);
16 | this.template = template;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/libs/brain/table/src/lib/brn-footer-def.directive.ts:
--------------------------------------------------------------------------------
1 | import { CdkFooterCellDef } from '@angular/cdk/table';
2 | import { Directive, TemplateRef, inject } from '@angular/core';
3 |
4 | @Directive({
5 | standalone: true,
6 | selector: '[brnFooterDef]',
7 | exportAs: 'brnFooterDef',
8 | })
9 | export class BrnFooterDefDirective extends CdkFooterCellDef {
10 | public override template: TemplateRef;
11 |
12 | constructor() {
13 | const template = inject>(TemplateRef);
14 |
15 | super(template);
16 | this.template = template;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/libs/brain/table/src/lib/brn-header-def.directive.ts:
--------------------------------------------------------------------------------
1 | import { CdkHeaderCellDef } from '@angular/cdk/table';
2 | import { Directive, TemplateRef, inject } from '@angular/core';
3 |
4 | @Directive({
5 | standalone: true,
6 | selector: '[brnHeaderDef]',
7 | exportAs: 'brnHeaderDef',
8 | })
9 | export class BrnHeaderDefDirective extends CdkHeaderCellDef {
10 | public override template: TemplateRef;
11 |
12 | constructor() {
13 | const template = inject>(TemplateRef);
14 |
15 | super(template);
16 | this.template = template;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/libs/brain/tabs/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/tabs
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/tabs`.
4 |
--------------------------------------------------------------------------------
/libs/brain/tabs/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/toggle-group/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/toggle-group
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/toggle-group`.
4 |
--------------------------------------------------------------------------------
/libs/brain/toggle-group/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/toggle/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/toggle
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/toggle`.
4 |
--------------------------------------------------------------------------------
/libs/brain/toggle/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/toggle/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { BrnToggleDirective } from './lib/brn-toggle.directive';
3 |
4 | export * from './lib/brn-toggle.directive';
5 |
6 | @NgModule({
7 | imports: [BrnToggleDirective],
8 | exports: [BrnToggleDirective],
9 | })
10 | export class BrnToggleModule {}
11 |
--------------------------------------------------------------------------------
/libs/brain/tooltip/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/brain/tooltip
2 |
3 | Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/tooltip`.
4 |
--------------------------------------------------------------------------------
/libs/brain/tooltip/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/brain/tooltip/src/lib/brn-tooltip-content.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, TemplateRef, inject } from '@angular/core';
2 | import { BrnTooltipDirective } from './brn-tooltip.directive';
3 |
4 | @Directive({
5 | selector: '[brnTooltipContent]',
6 | standalone: true,
7 | })
8 | export class BrnTooltipContentDirective {
9 | private readonly _brnTooltipDirective = inject(BrnTooltipDirective, { optional: true });
10 | private readonly _tpl = inject(TemplateRef);
11 |
12 | constructor() {
13 | if (!this._brnTooltipDirective || !this._tpl) return;
14 | this._brnTooltipDirective.tooltipTemplate.set(this._tpl);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/libs/brain/tooltip/src/lib/brn-tooltip.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, type TemplateRef, signal } from '@angular/core';
2 |
3 | @Directive({
4 | selector: '[brnTooltip]',
5 | standalone: true,
6 | })
7 | export class BrnTooltipDirective {
8 | public readonly tooltipTemplate = signal | null>(null);
9 | }
10 |
--------------------------------------------------------------------------------
/libs/brain/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "declaration": true,
6 | "declarationMap": true,
7 | "inlineSources": true,
8 | "types": []
9 | },
10 | "exclude": ["**/*.spec.ts", "test-setup.ts", "jest.config.ts", "**/*.test.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/brain/tsconfig.lib.prod.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.lib.json",
3 | "compilerOptions": {
4 | "declarationMap": false
5 | },
6 | "angularCompilerOptions": {
7 | "compilationMode": "partial"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/libs/brain/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "module": "commonjs",
6 | "target": "es2016",
7 | "types": ["jest", "node"]
8 | },
9 | "files": ["src/test-setup.ts"],
10 | "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"]
11 | }
12 |
--------------------------------------------------------------------------------
/libs/cli/README.md:
--------------------------------------------------------------------------------
1 | # cli
2 |
3 | This library was generated with [Nx](https://nx.dev).
4 |
5 | ## Building
6 |
7 | Run `nx build cli` to build the library.
8 |
9 | ## Running unit tests
10 |
11 | Run `nx test cli` to execute the unit tests via [Jest](https://jestjs.io).
12 |
--------------------------------------------------------------------------------
/libs/cli/executors.json:
--------------------------------------------------------------------------------
1 | {
2 | "executors": {}
3 | }
4 |
--------------------------------------------------------------------------------
/libs/cli/jest.config.ts:
--------------------------------------------------------------------------------
1 | export default {
2 | displayName: 'cli',
3 | preset: '../../jest.preset.cjs',
4 | testEnvironment: 'node',
5 | transform: {
6 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }],
7 | },
8 | moduleFileExtensions: ['ts', 'js', 'html'],
9 | coverageDirectory: '../../coverage/libs/cli',
10 | };
11 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/base/lib/deleteFiles.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import { join } from 'path/posix';
3 |
4 | export function deleteFiles(tree: Tree, path: string) {
5 | if (tree.isFile(path)) {
6 | tree.delete(path);
7 | return;
8 | }
9 |
10 | const files = tree.children(path);
11 |
12 | for (const file of files) {
13 | deleteFiles(tree, join(path, file));
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/base/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface HlmBaseGeneratorSchema {
2 | primitiveName: string;
3 | internalName: string;
4 | publicName: string;
5 | directory?: string;
6 | rootProject?: boolean;
7 | tags?: string;
8 | peerDependencies?: Record;
9 | angularCli?: boolean;
10 | }
11 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/base/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "$id": "HlmBaseGeneratorSchema",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "directory": {
8 | "type": "string",
9 | "description": "A directory where the lib is placed.",
10 | "x-priority": "important"
11 | },
12 | "tags": {
13 | "type": "string",
14 | "description": "Add tags to the library (used for linting)."
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/base/versions.ts:
--------------------------------------------------------------------------------
1 | // angular dependency
2 | export const FALLBACK_ANGULAR_VERSION = '^18.0.0';
3 | // ng-icon dependency
4 | export const NG_ICONS_VERSION = '^29.10.0';
5 | // spartan dependencies
6 | export const SPARTAN_BRAIN_VERSION = '0.0.1-alpha.381';
7 | // dev dependencies
8 | export const TAILWIND_MERGE_VERSION = '^2.2.0';
9 | export const TAILWINDCSS_VERSION = '^3.0.2';
10 | export const TAILWIND_ANIMATE_VERSION = '^1.0.6';
11 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/healthcheck/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import { healthcheckGenerator } from './generator';
3 | import { HealthcheckGeneratorSchema } from './schema';
4 |
5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
6 | export default convertNxGenerator((tree: any, schema: HealthcheckGeneratorSchema & { angularCli?: boolean }) =>
7 | healthcheckGenerator(tree, { ...schema, angularCli: true }),
8 | );
9 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/healthcheck/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface HealthcheckGeneratorSchema {
2 | autoFix?: boolean;
3 | skipFormat?: boolean;
4 | }
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/healthcheck/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "$id": "Healthcheck",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "autoFix": {
8 | "type": "boolean",
9 | "default": false,
10 | "description": "Automatically fix any issues"
11 | },
12 | "skipFormat": {
13 | "type": "boolean",
14 | "default": false,
15 | "description": "Skip formatting files"
16 | }
17 | },
18 | "required": []
19 | }
20 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-brain-imports/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import { migrateBrainImportsGenerator } from './generator';
3 |
4 | export default convertNxGenerator(migrateBrainImportsGenerator);
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-brain-imports/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface MigrateBrainImportsGeneratorSchema {
2 | skipInstall?: boolean;
3 | skipFormat?: boolean;
4 | }
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-brain-imports/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "$id": "MigrateBrainImports",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "skipFormat": {
8 | "type": "boolean",
9 | "description": "Skip formatting the code after migration."
10 | },
11 | "skipInstall": {
12 | "type": "boolean",
13 | "description": "Whether to verify the brain package is installed."
14 | }
15 | },
16 | "required": []
17 | }
18 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-core/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import { migrateCoreGenerator } from './generator';
3 |
4 | export default convertNxGenerator(migrateCoreGenerator);
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-core/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface MigrateCoreGeneratorSchema {
2 | skipFormat?: boolean;
3 | }
4 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-core/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "$id": "MigrateCore",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "skipFormat": {
8 | "type": "boolean",
9 | "default": false,
10 | "description": "Skip formatting files"
11 | }
12 | },
13 | "required": []
14 | }
15 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-helm-imports/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import { migrateHelmImportsGenerator } from './generator';
3 |
4 | export default convertNxGenerator(migrateHelmImportsGenerator);
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-helm-imports/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface MigrateHelmImportsGeneratorSchema {
2 | skipFormat?: boolean;
3 | }
4 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-helm-imports/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "$id": "MigrateHelmImports",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "skipFormat": {
8 | "type": "boolean",
9 | "description": "Skip formatting the code after migration."
10 | }
11 | },
12 | "required": []
13 | }
14 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-helm-libraries/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import migrateHelmLibrariesGenerator from './generator';
3 | import { MigrateHelmLibrariesGeneratorSchema } from './schema';
4 |
5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
6 | export default convertNxGenerator((tree: any, schema: MigrateHelmLibrariesGeneratorSchema & { angularCli?: boolean }) =>
7 | migrateHelmLibrariesGenerator(tree, { ...schema, angularCli: true }),
8 | );
9 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-helm-libraries/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface MigrateHelmLibrariesGeneratorSchema {
2 | directory?: string;
3 | rootProject?: boolean;
4 | tags?: string;
5 | angularCli?: boolean;
6 | }
7 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-helm-libraries/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/schema",
3 | "$id": "MigrateHelmLibraries",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "directory": {
8 | "type": "string",
9 | "description": "A directory where the libraries are placed. If not specified, the default directory will be used."
10 | },
11 | "tags": {
12 | "type": "string",
13 | "description": "Add tags to the library (used for linting)."
14 | }
15 | },
16 | "required": []
17 | }
18 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-icon/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import { migrateIconGenerator } from './generator';
3 |
4 | export default convertNxGenerator(migrateIconGenerator);
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-icon/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface MigrateIconGeneratorSchema {
2 | skipFormat?: boolean;
3 | }
4 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-icon/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/schema",
3 | "$id": "MigrateIcon",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "skipFormat": {
8 | "type": "boolean",
9 | "default": false,
10 | "description": "Skip formatting files"
11 | }
12 | },
13 | "required": []
14 | }
15 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-radio/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import migrateRadioGenerator from './generator';
3 |
4 | export default convertNxGenerator(migrateRadioGenerator);
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-radio/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface MigrateRadioGeneratorSchema {
2 | skipFormat?: boolean;
3 | }
4 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-radio/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/schema",
3 | "$id": "MigrateRadio",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "skipFormat": {
8 | "type": "boolean",
9 | "default": false,
10 | "description": "Skip formatting files"
11 | }
12 | },
13 | "required": []
14 | }
15 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-scroll-area/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import { migrateScrollAreaGenerator } from './generator';
3 |
4 | export default convertNxGenerator(migrateScrollAreaGenerator);
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-scroll-area/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface MigrateScrollAreaGeneratorSchema {
2 | skipFormat?: boolean;
3 | }
4 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-scroll-area/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "$id": "MigrateScrollArea",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "skipFormat": {
8 | "type": "boolean",
9 | "default": false,
10 | "description": "Skip formatting files"
11 | }
12 | },
13 | "required": []
14 | }
15 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-select/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import migrateSelectGenerator from './generator';
3 |
4 | export default convertNxGenerator(migrateSelectGenerator);
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-select/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface MigrateSelectGeneratorSchema {
2 | skipFormat?: boolean;
3 | }
4 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-select/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/schema",
3 | "$id": "MigrateSelect",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "skipFormat": {
8 | "type": "boolean",
9 | "default": false,
10 | "description": "Skip formatting files"
11 | }
12 | },
13 | "required": []
14 | }
15 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-toggle-group/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import migrateRadioGenerator from './generator';
3 |
4 | export default convertNxGenerator(migrateRadioGenerator);
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-toggle-group/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface MigrateToggleGroupGeneratorSchema {
2 | skipFormat?: boolean;
3 | }
4 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/migrate-toggle-group/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/schema",
3 | "$id": "MigrateRadio",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "skipFormat": {
8 | "type": "boolean",
9 | "default": false,
10 | "description": "Skip formatting files"
11 | }
12 | },
13 | "required": []
14 | }
15 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/theme/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import addThemeToApplicationGenerator from './generator';
3 |
4 | export default convertNxGenerator(addThemeToApplicationGenerator);
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/theme/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "$id": "HlmThemeGeneratorSchema",
4 | "title": "",
5 | "type": "object",
6 | "properties": {}
7 | }
8 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/compat.ts:
--------------------------------------------------------------------------------
1 | import { convertNxGenerator } from '@nx/devkit';
2 | import hlmUIGenerator from './generator';
3 | import type { HlmUIGeneratorSchema } from './schema';
4 |
5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
6 | export default convertNxGenerator((tree: any, schema: HlmUIGeneratorSchema & { angularCli?: boolean }) =>
7 | hlmUIGenerator(tree, { ...schema, angularCli: true }),
8 | );
9 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-accordion-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'accordion',
9 | internalName: 'ui-accordion-helm',
10 | publicName: 'ui-accordion-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-alert-dialog-helm/files/lib/hlm-alert-dialog-action-button.directive.ts.template:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { HlmButtonDirective } from '@spartan-ng/helm/button';
3 |
4 | @Directive({
5 | selector: 'button[hlmAlertDialogAction]',
6 | standalone: true,
7 | hostDirectives: [HlmButtonDirective],
8 | })
9 | export class HlmAlertDialogActionButtonDirective {}
10 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-alert-dialog-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'alert-dialog',
9 | internalName: 'ui-alert-dialog-helm',
10 | publicName: 'ui-alert-dialog-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-alert-helm/files/lib/hlm-alert-icon.directive.ts.template:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { provideHlmIconConfig } from '@spartan-ng/helm/icon';
3 |
4 | @Directive({
5 | selector: '[hlmAlertIcon]',
6 | standalone: true,
7 | providers: [provideHlmIconConfig({ size: 'sm' })],
8 | })
9 | export class HlmAlertIconDirective {}
10 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-alert-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'alert',
9 | internalName: 'ui-alert-helm',
10 | publicName: 'ui-alert-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-aspect-ratio-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmAspectRatioDirective } from './lib/helm-aspect-ratio.directive';
3 |
4 | export * from './lib/helm-aspect-ratio.directive';
5 |
6 | @NgModule({
7 | imports: [HlmAspectRatioDirective],
8 | exports: [HlmAspectRatioDirective],
9 | })
10 | export class HlmAspectRatioModule {}
11 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-aspect-ratio-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'aspect-ratio',
9 | internalName: 'ui-aspect-ratio-helm',
10 | publicName: 'ui-aspect-ratio-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-avatar-helm/files/lib/fallback/index.ts.template:
--------------------------------------------------------------------------------
1 | export * from './hlm-avatar-fallback.directive';
2 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-avatar-helm/files/lib/image/index.ts.template:
--------------------------------------------------------------------------------
1 | export * from './hlm-avatar-image.directive';
2 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-avatar-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'avatar',
9 | internalName: 'ui-avatar-helm',
10 | publicName: 'ui-avatar-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-badge-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmBadgeDirective } from './lib/hlm-badge.directive';
3 |
4 | export * from './lib/hlm-badge.directive';
5 |
6 | @NgModule({
7 | imports: [HlmBadgeDirective],
8 | exports: [HlmBadgeDirective],
9 | })
10 | export class HlmBadgeModule {}
11 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-badge-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'badge',
9 | internalName: 'ui-badge-helm',
10 | publicName: 'ui-badge-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-breadcrumb-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'breadcrumb',
9 | internalName: 'ui-breadcrumb-helm',
10 | publicName: 'ui-breadcrumb-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-button-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmButtonDirective } from './lib/hlm-button.directive';
3 | export * from './lib/hlm-button.token';
4 |
5 | export * from './lib/hlm-button.directive';
6 |
7 | @NgModule({
8 | imports: [HlmButtonDirective],
9 | exports: [HlmButtonDirective],
10 | })
11 | export class HlmButtonModule {}
12 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-button-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'button',
9 | internalName: 'ui-button-helm',
10 | publicName: 'ui-button-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-calendar-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmCalendarMultiComponent } from './lib/hlm-calendar-multi.component';
3 | import { HlmCalendarComponent } from './lib/hlm-calendar.component';
4 |
5 | export * from './lib/hlm-calendar-multi.component';
6 | export * from './lib/hlm-calendar.component';
7 |
8 | export const HlmCalendarImports = [HlmCalendarComponent, HlmCalendarMultiComponent] as const;
9 |
10 | @NgModule({
11 | imports: [...HlmCalendarImports],
12 | exports: [...HlmCalendarImports],
13 | })
14 | export class HlmCalendarModule {}
15 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-calendar-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'calendar',
9 | internalName: 'ui-calendar-helm',
10 | publicName: 'ui-calendar-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-card-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'card',
9 | internalName: 'ui-card-helm',
10 | publicName: 'ui-card-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-carousel-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'carousel',
9 | internalName: 'ui-carousel-helm',
10 | publicName: 'ui-carousel-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-checkbox-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { HlmCheckboxComponent } from './lib/hlm-checkbox.component';
4 |
5 | export * from './lib/hlm-checkbox.component';
6 |
7 | export const HlmCheckboxImports = [HlmCheckboxComponent] as const;
8 | @NgModule({
9 | imports: [...HlmCheckboxImports],
10 | exports: [...HlmCheckboxImports],
11 | })
12 | export class HlmCheckboxModule {}
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-checkbox-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'checkbox',
9 | internalName: 'ui-checkbox-helm',
10 | publicName: 'ui-checkbox-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-empty.directive.ts.template:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | @Directive({
6 | selector: '[hlmCommandEmpty]',
7 | standalone: true,
8 | host: {
9 | '[class]': '_computedClass()',
10 | },
11 | })
12 | export class HlmCommandEmptyDirective {
13 | public readonly userClass = input('', { alias: 'class' });
14 | protected readonly _computedClass = computed(() => hlm('py-6 text-center text-sm', this.userClass()));
15 | }
16 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-icon.directive.ts.template:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { provideHlmIconConfig } from '@spartan-ng/helm/icon';
3 |
4 | @Directive({
5 | standalone: true,
6 | selector: '[hlmCommandIcon]',
7 | host: {
8 | class: 'inline-flex mr-2 w-4 h-4',
9 | },
10 | providers: [provideHlmIconConfig({ size: 'sm' })],
11 | })
12 | export class HlmCommandIconDirective {}
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-command-helm/files/lib/hlm-command-shortcut.component.ts.template:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component } from '@angular/core';
2 |
3 | @Component({
4 | standalone: true,
5 | selector: 'hlm-command-shortcut',
6 | template: '',
7 | host: {
8 | class: 'font-light ml-auto opacity-60 text-xs tracking-widest',
9 | },
10 | changeDetection: ChangeDetectionStrategy.OnPush,
11 | })
12 | export class HlmCommandShortcutComponent {}
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-command-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'command',
9 | internalName: 'ui-command-helm',
10 | publicName: 'ui-command-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-date-picker-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'date-picker',
9 | internalName: 'ui-date-picker-helm',
10 | publicName: 'ui-date-picker-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-dialog-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'dialog',
9 | internalName: 'ui-dialog-helm',
10 | publicName: 'ui-dialog-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-form-field-helm/files/lib/hlm-error.directive.ts.template:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 |
3 | @Directive({
4 | standalone: true,
5 | // eslint-disable-next-line @angular-eslint/directive-selector
6 | selector: 'hlm-error',
7 | host: {
8 | class: 'block text-destructive text-sm font-medium',
9 | },
10 | })
11 | export class HlmErrorDirective {}
12 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-form-field-helm/files/lib/hlm-hint.directive.ts.template:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 |
3 | @Directive({
4 | // eslint-disable-next-line @angular-eslint/directive-selector
5 | selector: 'hlm-hint',
6 | standalone: true,
7 | host: {
8 | class: 'block text-sm text-muted-foreground',
9 | },
10 | })
11 | export class HlmHintDirective {}
12 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-form-field-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'form-field',
9 | internalName: 'ui-form-field-helm',
10 | publicName: 'ui-form-field-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-hover-card-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmHoverCardContentComponent } from './lib/hlm-hover-card-content.component';
3 |
4 | export { HlmHoverCardContentComponent } from './lib/hlm-hover-card-content.component';
5 |
6 | export const HlmHoverCardImports = [HlmHoverCardContentComponent] as const;
7 |
8 | @NgModule({
9 | imports: [...HlmHoverCardImports],
10 | exports: [...HlmHoverCardImports],
11 | })
12 | export class HlmHoverCardModule {}
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-hover-card-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'hover-card',
9 | internalName: 'ui-hover-card-helm',
10 | publicName: 'ui-hover-card-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-icon-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmIconDirective } from './lib/hlm-icon.directive';
3 |
4 | export * from './lib/hlm-icon.directive';
5 | export * from './lib/hlm-icon.token';
6 |
7 | @NgModule({
8 | imports: [HlmIconDirective],
9 | exports: [HlmIconDirective],
10 | })
11 | export class HlmIconModule {}
12 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-icon-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'icon',
9 | internalName: 'ui-icon-helm',
10 | publicName: 'ui-icon-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-input-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmInputErrorDirective } from './lib/hlm-input-error.directive';
3 | import { HlmInputDirective } from './lib/hlm-input.directive';
4 |
5 | export * from './lib/hlm-input-error.directive';
6 | export * from './lib/hlm-input.directive';
7 |
8 | @NgModule({
9 | imports: [HlmInputDirective, HlmInputErrorDirective],
10 | exports: [HlmInputDirective, HlmInputErrorDirective],
11 | })
12 | export class HlmInputModule {}
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-input-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'input',
9 | internalName: 'ui-input-helm',
10 | publicName: 'ui-input-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-input-otp-helm/files/lib/hlm-input-otp-fake-caret.component.ts.template:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'hlm-input-otp-fake-caret',
5 | standalone: true,
6 | template: `
7 |
10 | `,
11 | changeDetection: ChangeDetectionStrategy.OnPush,
12 | })
13 | export class HlmInputOtpFakeCaretComponent {}
14 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-input-otp-helm/files/lib/hlm-input-otp-group.directive.ts.template:
--------------------------------------------------------------------------------
1 | import { computed, Directive, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import { type ClassValue } from 'clsx';
4 |
5 | @Directive({
6 | selector: '[hlmInputOtpGroup]',
7 | standalone: true,
8 | host: {
9 | '[class]': '_computedClass()',
10 | },
11 | })
12 | export class HlmInputOtpGroupDirective {
13 | public readonly userClass = input('', { alias: 'class' });
14 |
15 | protected readonly _computedClass = computed(() => hlm('flex items-center', this.userClass()));
16 | }
17 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-input-otp-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'input-otp',
9 | internalName: 'ui-input-otp-helm',
10 | publicName: 'ui-input-otp-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-label-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmLabelDirective } from './lib/hlm-label.directive';
3 |
4 | export * from './lib/hlm-label.directive';
5 |
6 | @NgModule({
7 | imports: [HlmLabelDirective],
8 | exports: [HlmLabelDirective],
9 | })
10 | export class HlmLabelModule {}
11 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-label-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'label',
9 | internalName: 'ui-label-helm',
10 | publicName: 'ui-label-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-menu-helm/files/lib/hlm-menu-group.component.ts.template:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component } from '@angular/core';
2 | import { BrnMenuGroupDirective } from '@spartan-ng/brain/menu';
3 |
4 | @Component({
5 | selector: 'hlm-menu-group',
6 | standalone: true,
7 | host: {
8 | class: 'block',
9 | },
10 | hostDirectives: [BrnMenuGroupDirective],
11 | template: `
12 |
13 | `,
14 | changeDetection: ChangeDetectionStrategy.OnPush,
15 | })
16 | export class HlmMenuGroupComponent {}
17 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-menu-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'menu',
9 | internalName: 'ui-menu-helm',
10 | publicName: 'ui-menu-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-pagination-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'pagination',
9 | internalName: 'ui-pagination-helm',
10 | publicName: 'ui-pagination-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-popover-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'popover',
9 | internalName: 'ui-popover-helm',
10 | publicName: 'ui-popover-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-progress-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'progress',
9 | internalName: 'ui-progress-helm',
10 | publicName: 'ui-progress-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-radio-group-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'radio-group',
9 | internalName: 'ui-radio-group-helm',
10 | publicName: 'ui-radio-group-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-scroll-area-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmScrollAreaDirective } from './lib/hlm-scroll-area.directive';
3 |
4 | export * from './lib/hlm-scroll-area.directive';
5 |
6 | @NgModule({
7 | imports: [HlmScrollAreaDirective],
8 | exports: [HlmScrollAreaDirective],
9 | })
10 | export class HlmScrollAreaModule {}
11 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-scroll-area-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'scroll-area',
9 | internalName: 'ui-scroll-area-helm',
10 | publicName: 'ui-scroll-area-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-select-helm/files/lib/hlm-select.directive.ts.template:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | @Directive({
6 | selector: 'hlm-select, brn-select [hlm]',
7 | standalone: true,
8 | host: {
9 | '[class]': '_computedClass()',
10 | },
11 | })
12 | export class HlmSelectDirective {
13 | public readonly userClass = input('', { alias: 'class' });
14 | protected readonly _computedClass = computed(() => hlm('space-y-2', this.userClass()));
15 | }
16 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-select-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'select',
9 | internalName: 'ui-select-helm',
10 | publicName: 'ui-select-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-separator-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmSeparatorDirective } from './lib/hlm-separator.directive';
3 |
4 | export * from './lib/hlm-separator.directive';
5 |
6 | @NgModule({
7 | imports: [HlmSeparatorDirective],
8 | exports: [HlmSeparatorDirective],
9 | })
10 | export class HlmSeparatorModule {}
11 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-separator-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'separator',
9 | internalName: 'ui-separator-helm',
10 | publicName: 'ui-separator-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-sheet-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'sheet',
9 | internalName: 'ui-sheet-helm',
10 | publicName: 'ui-sheet-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-skeleton-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmSkeletonComponent } from './lib/hlm-skeleton.component';
3 |
4 | export * from './lib/hlm-skeleton.component';
5 |
6 | @NgModule({
7 | imports: [HlmSkeletonComponent],
8 | exports: [HlmSkeletonComponent],
9 | })
10 | export class HlmSkeletonModule {}
11 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-skeleton-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'skeleton',
9 | internalName: 'ui-skeleton-helm',
10 | publicName: 'ui-skeleton-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-slider-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | export * from './lib/hlm-slider.component';
2 | import { HlmSliderComponent } from './lib/hlm-slider.component';
3 |
4 | export const HlmSliderImports = [HlmSliderComponent] as const;
5 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-slider-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'slider',
9 | internalName: 'ui-slider-helm',
10 | publicName: 'ui-slider-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-sonner-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { HlmToasterComponent } from './lib/hlm-toaster.component';
4 |
5 | export * from './lib/hlm-toaster.component';
6 |
7 | export const HlmToasterImports = [HlmToasterComponent] as const;
8 |
9 | @NgModule({
10 | imports: [...HlmToasterImports],
11 | exports: [...HlmToasterImports],
12 | })
13 | export class HlmToasterModule {}
14 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-sonner-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'sonner',
9 | internalName: 'ui-sonner-helm',
10 | publicName: 'ui-sonner-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-spinner-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmSpinnerComponent } from './lib/hlm-spinner.component';
3 |
4 | export * from './lib/hlm-spinner.component';
5 |
6 | @NgModule({
7 | imports: [HlmSpinnerComponent],
8 | exports: [HlmSpinnerComponent],
9 | })
10 | export class HlmSpinnerModule {}
11 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-spinner-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'spinner',
9 | internalName: 'ui-spinner-helm',
10 | publicName: 'ui-spinner-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-switch-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { HlmSwitchThumbDirective } from './lib/hlm-switch-thumb.directive';
4 | import { HlmSwitchComponent } from './lib/hlm-switch.component';
5 |
6 | export * from './lib/hlm-switch-thumb.directive';
7 | export * from './lib/hlm-switch.component';
8 |
9 | export const HlmSwitchImports = [HlmSwitchComponent, HlmSwitchThumbDirective] as const;
10 | @NgModule({
11 | imports: [...HlmSwitchImports],
12 | exports: [...HlmSwitchImports],
13 | })
14 | export class HlmSwitchModule {}
15 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-switch-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'switch',
9 | internalName: 'ui-switch-helm',
10 | publicName: 'ui-switch-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-table-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'table',
9 | internalName: 'ui-table-helm',
10 | publicName: 'ui-table-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-tabs-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'tabs',
9 | internalName: 'ui-tabs-helm',
10 | publicName: 'ui-tabs-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-toggle-group-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmToggleGroupDirective } from './lib/hlm-toggle-group.directive';
3 | import { HlmToggleGroupItemDirective } from './lib/hlm-toggle-item.directive';
4 |
5 | export * from './lib/hlm-toggle-group.directive';
6 | export * from './lib/hlm-toggle-item.directive';
7 |
8 | @NgModule({
9 | imports: [HlmToggleGroupItemDirective, HlmToggleGroupDirective],
10 | exports: [HlmToggleGroupItemDirective, HlmToggleGroupDirective],
11 | })
12 | export class HlmToggleGroupModule {}
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-toggle-group-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'toggle-group',
9 | internalName: 'ui-toggle-group-helm',
10 | publicName: 'ui-toggle-group-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-toggle-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmToggleDirective } from './lib/hlm-toggle.directive';
3 |
4 | export * from './lib/hlm-toggle.directive';
5 | @NgModule({
6 | imports: [HlmToggleDirective],
7 | exports: [HlmToggleDirective],
8 | })
9 | export class HlmToggleModule {}
10 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-toggle-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'toggle',
9 | internalName: 'ui-toggle-helm',
10 | publicName: 'ui-toggle-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-tooltip-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmTooltipTriggerDirective } from './lib/hlm-tooltip-trigger.directive';
3 | import { HlmTooltipComponent } from './lib/hlm-tooltip.component';
4 |
5 | export * from './lib/hlm-tooltip-trigger.directive';
6 | export * from './lib/hlm-tooltip.component';
7 |
8 | export const HlmTooltipImports = [HlmTooltipComponent, HlmTooltipTriggerDirective] as const;
9 |
10 | @NgModule({
11 | imports: [...HlmTooltipImports],
12 | exports: [...HlmTooltipImports],
13 | })
14 | export class HlmTooltipModule {}
15 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-tooltip-helm/files/lib/hlm-tooltip.component.ts.template:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
2 | import { BrnTooltipDirective } from '@spartan-ng/brain/tooltip';
3 |
4 | @Component({
5 | selector: 'hlm-tooltip',
6 | encapsulation: ViewEncapsulation.None,
7 | changeDetection: ChangeDetectionStrategy.OnPush,
8 | host: {
9 | '[style]': '{display: "contents"}',
10 | },
11 | hostDirectives: [BrnTooltipDirective],
12 | template: `
13 |
14 | `,
15 | })
16 | export class HlmTooltipComponent {}
17 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-tooltip-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'tooltip',
9 | internalName: 'ui-tooltip-helm',
10 | publicName: 'ui-tooltip-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-typography-helm/files/index.ts.template:
--------------------------------------------------------------------------------
1 | export * from './lib/hlm-blockquote.directive';
2 | export * from './lib/hlm-code.directive';
3 | export * from './lib/hlm-h1.directive';
4 | export * from './lib/hlm-h2.directive';
5 | export * from './lib/hlm-h3.directive';
6 | export * from './lib/hlm-h4.directive';
7 | export * from './lib/hlm-large.directive';
8 | export * from './lib/hlm-lead.directive';
9 | export * from './lib/hlm-muted.directive';
10 | export * from './lib/hlm-p.directive';
11 | export * from './lib/hlm-small.directive';
12 | export * from './lib/hlm-ul.directive';
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/libs/ui-typography-helm/generator.ts:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {
7 | ...options,
8 | primitiveName: 'typography',
9 | internalName: 'ui-typography-helm',
10 | publicName: 'ui-typography-helm',
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/libs/cli/src/generators/ui/schema.d.ts:
--------------------------------------------------------------------------------
1 | import { Primitive } from './primitives';
2 |
3 | export interface HlmUIGeneratorSchema {
4 | name?: Primitive;
5 | directory?: string;
6 | rootProject?: boolean;
7 | tags?: string;
8 | }
9 |
--------------------------------------------------------------------------------
/libs/cli/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './generators/migrate-brain-imports/generator';
2 |
--------------------------------------------------------------------------------
/libs/cli/src/utils/get-project-names.ts:
--------------------------------------------------------------------------------
1 | import { type Tree, getProjects } from '@nx/devkit';
2 |
3 | export const getProjectsAndNames = (tree: Tree) => {
4 | const projectNames: string[] = [];
5 | const projects = getProjects(tree);
6 |
7 | projects.forEach((projectConfiguration, projectName) => {
8 | if (projectConfiguration.projectType === 'application') {
9 | projectNames.push(projectName);
10 | }
11 | });
12 | return { projects, projectNames };
13 | };
14 |
--------------------------------------------------------------------------------
/libs/cli/src/utils/visit-files.ts:
--------------------------------------------------------------------------------
1 | import { Tree, visitNotIgnoredFiles } from '@nx/devkit';
2 |
3 | export function visitFiles(tree: Tree, dirPath: string, visitor: (path: string) => void): void {
4 | visitNotIgnoredFiles(tree, dirPath, (path) => {
5 | // if the file is part of the generators we want to skip as we don't want it updating the code that is performing the updates
6 | if (path.includes('libs/cli/src/generators')) {
7 | return;
8 | }
9 | visitor(path);
10 | });
11 | }
12 |
--------------------------------------------------------------------------------
/libs/cli/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base.json",
3 | "compilerOptions": {
4 | "module": "commonjs"
5 | },
6 | "files": [],
7 | "include": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | },
12 | {
13 | "path": "./tsconfig.spec.json"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/libs/cli/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "declaration": true,
6 | "types": ["node"],
7 | "resolveJsonModule": true
8 | },
9 | "include": ["src/**/*.ts"],
10 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"]
11 | }
12 |
--------------------------------------------------------------------------------
/libs/cli/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"],
7 | "resolveJsonModule": true
8 | },
9 | "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/libs/helm/README.md:
--------------------------------------------------------------------------------
1 | # helm
2 |
3 | This library was generated with [Nx](https://nx.dev).
4 |
5 | ## Running unit tests
6 |
7 | Run `nx test helm` to execute the unit tests.
8 |
--------------------------------------------------------------------------------
/libs/helm/accordion/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/accordion
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/accordion`.
4 |
--------------------------------------------------------------------------------
/libs/helm/accordion/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/alert-dialog/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/alert-dialog
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/alert-dialog`.
4 |
--------------------------------------------------------------------------------
/libs/helm/alert-dialog/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/alert-dialog/src/lib/hlm-alert-dialog-action-button.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { HlmButtonDirective } from '@spartan-ng/helm/button';
3 |
4 | @Directive({
5 | selector: 'button[hlmAlertDialogAction]',
6 | standalone: true,
7 | hostDirectives: [HlmButtonDirective],
8 | })
9 | export class HlmAlertDialogActionButtonDirective {}
10 |
--------------------------------------------------------------------------------
/libs/helm/alert/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/alert
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/alert`.
4 |
--------------------------------------------------------------------------------
/libs/helm/alert/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/alert/src/lib/hlm-alert-icon.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { provideHlmIconConfig } from '@spartan-ng/helm/icon';
3 |
4 | @Directive({
5 | selector: '[hlmAlertIcon]',
6 | standalone: true,
7 | providers: [provideHlmIconConfig({ size: 'sm' })],
8 | })
9 | export class HlmAlertIconDirective {}
10 |
--------------------------------------------------------------------------------
/libs/helm/aspect-ratio/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/aspect-ratio
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/aspect-ratio`.
4 |
--------------------------------------------------------------------------------
/libs/helm/aspect-ratio/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/aspect-ratio/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmAspectRatioDirective } from './lib/helm-aspect-ratio.directive';
3 |
4 | export * from './lib/helm-aspect-ratio.directive';
5 |
6 | @NgModule({
7 | imports: [HlmAspectRatioDirective],
8 | exports: [HlmAspectRatioDirective],
9 | })
10 | export class HlmAspectRatioModule {}
11 |
--------------------------------------------------------------------------------
/libs/helm/avatar/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/avatar
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/avatar`.
4 |
--------------------------------------------------------------------------------
/libs/helm/avatar/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/avatar/src/lib/fallback/index.ts:
--------------------------------------------------------------------------------
1 | export * from './hlm-avatar-fallback.directive';
2 |
--------------------------------------------------------------------------------
/libs/helm/avatar/src/lib/image/index.ts:
--------------------------------------------------------------------------------
1 | export * from './hlm-avatar-image.directive';
2 |
--------------------------------------------------------------------------------
/libs/helm/badge/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/badge
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/badge`.
4 |
--------------------------------------------------------------------------------
/libs/helm/badge/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/badge/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmBadgeDirective } from './lib/hlm-badge.directive';
3 |
4 | export * from './lib/hlm-badge.directive';
5 |
6 | @NgModule({
7 | imports: [HlmBadgeDirective],
8 | exports: [HlmBadgeDirective],
9 | })
10 | export class HlmBadgeModule {}
11 |
--------------------------------------------------------------------------------
/libs/helm/breadcrumb/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/breadcrumb
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/breadcrumb`.
4 |
--------------------------------------------------------------------------------
/libs/helm/breadcrumb/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/breadcrumb/src/lib/hlm-breadcrumb-item.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | @Directive({
6 | selector: '[hlmBreadcrumbItem]',
7 | standalone: true,
8 | host: {
9 | '[class]': '_computedClass()',
10 | },
11 | })
12 | export class HlmBreadcrumbItemDirective {
13 | public readonly userClass = input('', { alias: 'class' });
14 |
15 | protected readonly _computedClass = computed(() => hlm('inline-flex items-center gap-1.5', this.userClass()));
16 | }
17 |
--------------------------------------------------------------------------------
/libs/helm/breadcrumb/src/lib/hlm-breadcrumb-page.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | @Directive({
6 | selector: '[hlmBreadcrumbPage]',
7 | standalone: true,
8 | host: {
9 | role: 'link',
10 | '[class]': '_computedClass()',
11 | },
12 | })
13 | export class HlmBreadcrumbPageDirective {
14 | public readonly userClass = input('', { alias: 'class' });
15 |
16 | protected readonly _computedClass = computed(() => hlm('font-normal text-foreground', this.userClass()));
17 | }
18 |
--------------------------------------------------------------------------------
/libs/helm/button/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/button
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/button`.
4 |
--------------------------------------------------------------------------------
/libs/helm/button/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/button/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmButtonDirective } from './lib/hlm-button.directive';
3 | export * from './lib/hlm-button.token';
4 |
5 | export * from './lib/hlm-button.directive';
6 |
7 | @NgModule({
8 | imports: [HlmButtonDirective],
9 | exports: [HlmButtonDirective],
10 | })
11 | export class HlmButtonModule {}
12 |
--------------------------------------------------------------------------------
/libs/helm/calendar/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/calendar
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/calendar`.
4 |
--------------------------------------------------------------------------------
/libs/helm/calendar/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/calendar/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmCalendarMultiComponent } from './lib/hlm-calendar-multi.component';
3 | import { HlmCalendarComponent } from './lib/hlm-calendar.component';
4 |
5 | export * from './lib/hlm-calendar-multi.component';
6 | export * from './lib/hlm-calendar.component';
7 |
8 | export const HlmCalendarImports = [HlmCalendarComponent, HlmCalendarMultiComponent] as const;
9 |
10 | @NgModule({
11 | imports: [...HlmCalendarImports],
12 | exports: [...HlmCalendarImports],
13 | })
14 | export class HlmCalendarModule {}
15 |
--------------------------------------------------------------------------------
/libs/helm/card/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/card
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/card`.
4 |
--------------------------------------------------------------------------------
/libs/helm/card/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/carousel/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/carousel
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/carousel`.
4 |
--------------------------------------------------------------------------------
/libs/helm/carousel/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/checkbox/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/checkbox
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/checkbox`.
4 |
--------------------------------------------------------------------------------
/libs/helm/checkbox/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/checkbox/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { HlmCheckboxComponent } from './lib/hlm-checkbox.component';
4 |
5 | export * from './lib/hlm-checkbox.component';
6 |
7 | export const HlmCheckboxImports = [HlmCheckboxComponent] as const;
8 | @NgModule({
9 | imports: [...HlmCheckboxImports],
10 | exports: [...HlmCheckboxImports],
11 | })
12 | export class HlmCheckboxModule {}
13 |
--------------------------------------------------------------------------------
/libs/helm/command/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/command
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/command`.
4 |
--------------------------------------------------------------------------------
/libs/helm/command/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/command/src/lib/hlm-command-empty.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | @Directive({
6 | selector: '[hlmCommandEmpty]',
7 | standalone: true,
8 | host: {
9 | '[class]': '_computedClass()',
10 | },
11 | })
12 | export class HlmCommandEmptyDirective {
13 | public readonly userClass = input('', { alias: 'class' });
14 | protected readonly _computedClass = computed(() => hlm('py-6 text-center text-sm', this.userClass()));
15 | }
16 |
--------------------------------------------------------------------------------
/libs/helm/command/src/lib/hlm-command-icon.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 | import { provideHlmIconConfig } from '@spartan-ng/helm/icon';
3 |
4 | @Directive({
5 | standalone: true,
6 | selector: '[hlmCommandIcon]',
7 | host: {
8 | class: 'inline-flex mr-2 w-4 h-4',
9 | },
10 | providers: [provideHlmIconConfig({ size: 'sm' })],
11 | })
12 | export class HlmCommandIconDirective {}
13 |
--------------------------------------------------------------------------------
/libs/helm/command/src/lib/hlm-command-shortcut.component.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component } from '@angular/core';
2 |
3 | @Component({
4 | standalone: true,
5 | selector: 'hlm-command-shortcut',
6 | template: '',
7 | host: {
8 | class: 'font-light ml-auto opacity-60 text-xs tracking-widest',
9 | },
10 | changeDetection: ChangeDetectionStrategy.OnPush,
11 | })
12 | export class HlmCommandShortcutComponent {}
13 |
--------------------------------------------------------------------------------
/libs/helm/date-picker/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/date-picker
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/date-picker`.
4 |
--------------------------------------------------------------------------------
/libs/helm/date-picker/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/dialog/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/dialog
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/dialog`.
4 |
--------------------------------------------------------------------------------
/libs/helm/dialog/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/form-field/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/form-field
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/form-field`.
4 |
--------------------------------------------------------------------------------
/libs/helm/form-field/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/form-field/src/lib/hlm-error.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 |
3 | @Directive({
4 | standalone: true,
5 | // eslint-disable-next-line @angular-eslint/directive-selector
6 | selector: 'hlm-error',
7 | host: {
8 | class: 'block text-destructive text-sm font-medium',
9 | },
10 | })
11 | export class HlmErrorDirective {}
12 |
--------------------------------------------------------------------------------
/libs/helm/form-field/src/lib/hlm-hint.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive } from '@angular/core';
2 |
3 | @Directive({
4 | // eslint-disable-next-line @angular-eslint/directive-selector
5 | selector: 'hlm-hint',
6 | standalone: true,
7 | host: {
8 | class: 'block text-sm text-muted-foreground',
9 | },
10 | })
11 | export class HlmHintDirective {}
12 |
--------------------------------------------------------------------------------
/libs/helm/hover-card/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/hover-card
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/hover-card`.
4 |
--------------------------------------------------------------------------------
/libs/helm/hover-card/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/hover-card/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmHoverCardContentComponent } from './lib/hlm-hover-card-content.component';
3 |
4 | export { HlmHoverCardContentComponent } from './lib/hlm-hover-card-content.component';
5 |
6 | export const HlmHoverCardImports = [HlmHoverCardContentComponent] as const;
7 |
8 | @NgModule({
9 | imports: [...HlmHoverCardImports],
10 | exports: [...HlmHoverCardImports],
11 | })
12 | export class HlmHoverCardModule {}
13 |
--------------------------------------------------------------------------------
/libs/helm/icon/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/icon
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/icon`.
4 |
--------------------------------------------------------------------------------
/libs/helm/icon/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/icon/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmIconDirective } from './lib/hlm-icon.directive';
3 |
4 | export * from './lib/hlm-icon.directive';
5 | export * from './lib/hlm-icon.token';
6 |
7 | @NgModule({
8 | imports: [HlmIconDirective],
9 | exports: [HlmIconDirective],
10 | })
11 | export class HlmIconModule {}
12 |
--------------------------------------------------------------------------------
/libs/helm/input-otp/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/input-otp
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/input-otp`.
4 |
--------------------------------------------------------------------------------
/libs/helm/input-otp/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/input-otp/src/lib/hlm-input-otp-fake-caret.component.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'hlm-input-otp-fake-caret',
5 | standalone: true,
6 | template: `
7 |
10 | `,
11 | changeDetection: ChangeDetectionStrategy.OnPush,
12 | })
13 | export class HlmInputOtpFakeCaretComponent {}
14 |
--------------------------------------------------------------------------------
/libs/helm/input-otp/src/lib/hlm-input-otp-group.directive.ts:
--------------------------------------------------------------------------------
1 | import { computed, Directive, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import { type ClassValue } from 'clsx';
4 |
5 | @Directive({
6 | selector: '[hlmInputOtpGroup]',
7 | standalone: true,
8 | host: {
9 | '[class]': '_computedClass()',
10 | },
11 | })
12 | export class HlmInputOtpGroupDirective {
13 | public readonly userClass = input('', { alias: 'class' });
14 |
15 | protected readonly _computedClass = computed(() => hlm('flex items-center', this.userClass()));
16 | }
17 |
--------------------------------------------------------------------------------
/libs/helm/input-otp/src/lib/hlm-input-otp.directive.ts:
--------------------------------------------------------------------------------
1 | import { computed, Directive, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import { type ClassValue } from 'clsx';
4 |
5 | @Directive({
6 | selector: 'brn-input-otp [hlm]',
7 | standalone: true,
8 | host: {
9 | '[class]': '_computedClass()',
10 | },
11 | })
12 | export class HlmInputOtpDirective {
13 | public readonly userClass = input('', { alias: 'class' });
14 |
15 | protected readonly _computedClass = computed(() =>
16 | hlm('flex items-center gap-2 has-[:disabled]:opacity-50', this.userClass()),
17 | );
18 | }
19 |
--------------------------------------------------------------------------------
/libs/helm/input/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/input
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/input`.
4 |
--------------------------------------------------------------------------------
/libs/helm/input/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/input/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmInputErrorDirective } from './lib/hlm-input-error.directive';
3 | import { HlmInputDirective } from './lib/hlm-input.directive';
4 |
5 | export * from './lib/hlm-input-error.directive';
6 | export * from './lib/hlm-input.directive';
7 |
8 | @NgModule({
9 | imports: [HlmInputDirective, HlmInputErrorDirective],
10 | exports: [HlmInputDirective, HlmInputErrorDirective],
11 | })
12 | export class HlmInputModule {}
13 |
--------------------------------------------------------------------------------
/libs/helm/label/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/label
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/label`.
4 |
--------------------------------------------------------------------------------
/libs/helm/label/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/label/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmLabelDirective } from './lib/hlm-label.directive';
3 |
4 | export * from './lib/hlm-label.directive';
5 |
6 | @NgModule({
7 | imports: [HlmLabelDirective],
8 | exports: [HlmLabelDirective],
9 | })
10 | export class HlmLabelModule {}
11 |
--------------------------------------------------------------------------------
/libs/helm/menu/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/menu
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/menu`.
4 |
--------------------------------------------------------------------------------
/libs/helm/menu/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/menu/src/lib/hlm-menu-group.component.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component } from '@angular/core';
2 | import { BrnMenuGroupDirective } from '@spartan-ng/brain/menu';
3 |
4 | @Component({
5 | selector: 'hlm-menu-group',
6 | standalone: true,
7 | host: {
8 | class: 'block',
9 | },
10 | hostDirectives: [BrnMenuGroupDirective],
11 | template: `
12 |
13 | `,
14 | changeDetection: ChangeDetectionStrategy.OnPush,
15 | })
16 | export class HlmMenuGroupComponent {}
17 |
--------------------------------------------------------------------------------
/libs/helm/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3 | "dest": "../../dist/libs/helm",
4 | "lib": {
5 | "entryFile": "src/index.ts"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/libs/helm/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@spartan-ng/helm",
3 | "version": "0.0.1-alpha.461",
4 | "sideEffects": false,
5 | "peerDependencies": {
6 | "@angular/cdk": ">=19.0.0",
7 | "@angular/common": ">=19.0.0",
8 | "@angular/core": ">=19.0.0",
9 | "@angular/forms": ">=19.0.0",
10 | "@angular/router": ">=19.0.0",
11 | "@ng-icons/core": ">=29.0.0",
12 | "@ng-icons/lucide": ">=29.0.0",
13 | "@spartan-ng/brain": "0.0.1-alpha.471",
14 | "class-variance-authority": "^0.7.0",
15 | "clsx": "^2.1.1",
16 | "embla-carousel-angular": ">=19.0.0",
17 | "ngx-sonner": ">=3.0.0"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/libs/helm/pagination/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/pagination
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/pagination`.
4 |
--------------------------------------------------------------------------------
/libs/helm/pagination/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/popover/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/popover
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/popover`.
4 |
--------------------------------------------------------------------------------
/libs/helm/popover/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/popover/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { HlmPopoverCloseDirective } from './lib/hlm-popover-close.directive';
4 | import { HlmPopoverContentDirective } from './lib/hlm-popover-content.directive';
5 |
6 | export * from './lib/hlm-popover-close.directive';
7 | export * from './lib/hlm-popover-content.directive';
8 |
9 | export const HlmPopoverImports = [HlmPopoverContentDirective, HlmPopoverCloseDirective] as const;
10 |
11 | @NgModule({
12 | imports: [...HlmPopoverImports],
13 | exports: [...HlmPopoverImports],
14 | })
15 | export class HlmPopoverModule {}
16 |
--------------------------------------------------------------------------------
/libs/helm/progress/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/progress
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/progress`.
4 |
--------------------------------------------------------------------------------
/libs/helm/progress/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/progress/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { HlmProgressIndicatorDirective } from './lib/hlm-progress-indicator.directive';
4 | import { HlmProgressDirective } from './lib/hlm-progress.directive';
5 |
6 | export * from './lib/hlm-progress-indicator.directive';
7 | export * from './lib/hlm-progress.directive';
8 |
9 | export const HlmProgressImports = [HlmProgressDirective, HlmProgressIndicatorDirective] as const;
10 |
11 | @NgModule({
12 | imports: [...HlmProgressImports],
13 | exports: [...HlmProgressImports],
14 | })
15 | export class HlmProgressModule {}
16 |
--------------------------------------------------------------------------------
/libs/helm/radio-group/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/radio-group
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/radio-group`.
4 |
--------------------------------------------------------------------------------
/libs/helm/radio-group/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/scroll-area/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/scroll-area
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/scroll-area`.
4 |
--------------------------------------------------------------------------------
/libs/helm/scroll-area/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/scroll-area/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmScrollAreaDirective } from './lib/hlm-scroll-area.directive';
3 |
4 | export * from './lib/hlm-scroll-area.directive';
5 |
6 | @NgModule({
7 | imports: [HlmScrollAreaDirective],
8 | exports: [HlmScrollAreaDirective],
9 | })
10 | export class HlmScrollAreaModule {}
11 |
--------------------------------------------------------------------------------
/libs/helm/select/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/select
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/select`.
4 |
--------------------------------------------------------------------------------
/libs/helm/select/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/select/src/lib/hlm-select.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | @Directive({
6 | selector: 'hlm-select, brn-select [hlm]',
7 | standalone: true,
8 | host: {
9 | '[class]': '_computedClass()',
10 | },
11 | })
12 | export class HlmSelectDirective {
13 | public readonly userClass = input('', { alias: 'class' });
14 | protected readonly _computedClass = computed(() => hlm('space-y-2', this.userClass()));
15 | }
16 |
--------------------------------------------------------------------------------
/libs/helm/separator/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/separator
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/separator`.
4 |
--------------------------------------------------------------------------------
/libs/helm/separator/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/separator/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmSeparatorDirective } from './lib/hlm-separator.directive';
3 |
4 | export * from './lib/hlm-separator.directive';
5 |
6 | @NgModule({
7 | imports: [HlmSeparatorDirective],
8 | exports: [HlmSeparatorDirective],
9 | })
10 | export class HlmSeparatorModule {}
11 |
--------------------------------------------------------------------------------
/libs/helm/sheet/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/sheet
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/sheet`.
4 |
--------------------------------------------------------------------------------
/libs/helm/sheet/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/skeleton/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/skeleton
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/skeleton`.
4 |
--------------------------------------------------------------------------------
/libs/helm/skeleton/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/skeleton/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmSkeletonComponent } from './lib/hlm-skeleton.component';
3 |
4 | export * from './lib/hlm-skeleton.component';
5 |
6 | @NgModule({
7 | imports: [HlmSkeletonComponent],
8 | exports: [HlmSkeletonComponent],
9 | })
10 | export class HlmSkeletonModule {}
11 |
--------------------------------------------------------------------------------
/libs/helm/slider/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/slider
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/slider`.
4 |
--------------------------------------------------------------------------------
/libs/helm/slider/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/slider/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/hlm-slider.component';
2 | import { HlmSliderComponent } from './lib/hlm-slider.component';
3 |
4 | export const HlmSliderImports = [HlmSliderComponent] as const;
5 |
--------------------------------------------------------------------------------
/libs/helm/sonner/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/sonner
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/sonner`.
4 |
--------------------------------------------------------------------------------
/libs/helm/sonner/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/sonner/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { HlmToasterComponent } from './lib/hlm-toaster.component';
4 |
5 | export * from './lib/hlm-toaster.component';
6 |
7 | export const HlmToasterImports = [HlmToasterComponent] as const;
8 |
9 | @NgModule({
10 | imports: [...HlmToasterImports],
11 | exports: [...HlmToasterImports],
12 | })
13 | export class HlmToasterModule {}
14 |
--------------------------------------------------------------------------------
/libs/helm/spinner/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/spinner
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/spinner`.
4 |
--------------------------------------------------------------------------------
/libs/helm/spinner/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/spinner/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmSpinnerComponent } from './lib/hlm-spinner.component';
3 |
4 | export * from './lib/hlm-spinner.component';
5 |
6 | @NgModule({
7 | imports: [HlmSpinnerComponent],
8 | exports: [HlmSpinnerComponent],
9 | })
10 | export class HlmSpinnerModule {}
11 |
--------------------------------------------------------------------------------
/libs/helm/src/index.ts:
--------------------------------------------------------------------------------
1 | // This file is intentionally left empty. Import from the respective entrypoints.
2 | export default null;
3 |
--------------------------------------------------------------------------------
/libs/helm/src/test-setup.ts:
--------------------------------------------------------------------------------
1 | import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
2 |
3 | setupZoneTestEnv({
4 | errorOnUnknownElements: true,
5 | errorOnUnknownProperties: true,
6 | });
7 |
--------------------------------------------------------------------------------
/libs/helm/switch/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/switch
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/switch`.
4 |
--------------------------------------------------------------------------------
/libs/helm/switch/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/switch/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { HlmSwitchThumbDirective } from './lib/hlm-switch-thumb.directive';
4 | import { HlmSwitchComponent } from './lib/hlm-switch.component';
5 |
6 | export * from './lib/hlm-switch-thumb.directive';
7 | export * from './lib/hlm-switch.component';
8 |
9 | export const HlmSwitchImports = [HlmSwitchComponent, HlmSwitchThumbDirective] as const;
10 | @NgModule({
11 | imports: [...HlmSwitchImports],
12 | exports: [...HlmSwitchImports],
13 | })
14 | export class HlmSwitchModule {}
15 |
--------------------------------------------------------------------------------
/libs/helm/table/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/table
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/table`.
4 |
--------------------------------------------------------------------------------
/libs/helm/table/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/tabs/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/tabs
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/tabs`.
4 |
--------------------------------------------------------------------------------
/libs/helm/tabs/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/toggle-group/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/toggle-group
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/toggle-group`.
4 |
--------------------------------------------------------------------------------
/libs/helm/toggle-group/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/toggle-group/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmToggleGroupDirective } from './lib/hlm-toggle-group.directive';
3 | import { HlmToggleGroupItemDirective } from './lib/hlm-toggle-item.directive';
4 |
5 | export * from './lib/hlm-toggle-group.directive';
6 | export * from './lib/hlm-toggle-item.directive';
7 |
8 | @NgModule({
9 | imports: [HlmToggleGroupItemDirective, HlmToggleGroupDirective],
10 | exports: [HlmToggleGroupItemDirective, HlmToggleGroupDirective],
11 | })
12 | export class HlmToggleGroupModule {}
13 |
--------------------------------------------------------------------------------
/libs/helm/toggle/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/toggle
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/toggle`.
4 |
--------------------------------------------------------------------------------
/libs/helm/toggle/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/toggle/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmToggleDirective } from './lib/hlm-toggle.directive';
3 |
4 | export * from './lib/hlm-toggle.directive';
5 | @NgModule({
6 | imports: [HlmToggleDirective],
7 | exports: [HlmToggleDirective],
8 | })
9 | export class HlmToggleModule {}
10 |
--------------------------------------------------------------------------------
/libs/helm/tooltip/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/tooltip
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/tooltip`.
4 |
--------------------------------------------------------------------------------
/libs/helm/tooltip/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/tooltip/src/index.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { HlmTooltipTriggerDirective } from './lib/hlm-tooltip-trigger.directive';
3 | import { HlmTooltipComponent } from './lib/hlm-tooltip.component';
4 |
5 | export * from './lib/hlm-tooltip-trigger.directive';
6 | export * from './lib/hlm-tooltip.component';
7 |
8 | export const HlmTooltipImports = [HlmTooltipComponent, HlmTooltipTriggerDirective] as const;
9 |
10 | @NgModule({
11 | imports: [...HlmTooltipImports],
12 | exports: [...HlmTooltipImports],
13 | })
14 | export class HlmTooltipModule {}
15 |
--------------------------------------------------------------------------------
/libs/helm/tooltip/src/lib/hlm-tooltip.component.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
2 | import { BrnTooltipDirective } from '@spartan-ng/brain/tooltip';
3 |
4 | @Component({
5 | selector: 'hlm-tooltip',
6 | encapsulation: ViewEncapsulation.None,
7 | changeDetection: ChangeDetectionStrategy.OnPush,
8 | host: {
9 | '[style]': '{display: "contents"}',
10 | },
11 | hostDirectives: [BrnTooltipDirective],
12 | template: `
13 |
14 | `,
15 | })
16 | export class HlmTooltipComponent {}
17 |
--------------------------------------------------------------------------------
/libs/helm/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "declaration": true,
6 | "declarationMap": true,
7 | "inlineSources": true,
8 | "types": []
9 | },
10 | "exclude": ["**/*.spec.ts", "test-setup.ts", "jest.config.ts", "**/*.test.ts"],
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/helm/tsconfig.lib.prod.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.lib.json",
3 | "compilerOptions": {
4 | "declarationMap": false
5 | },
6 | "angularCompilerOptions": {
7 | "compilationMode": "partial"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/libs/helm/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "module": "commonjs",
6 | "target": "es2016",
7 | "types": ["jest", "node"]
8 | },
9 | "files": ["src/test-setup.ts"],
10 | "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"]
11 | }
12 |
--------------------------------------------------------------------------------
/libs/helm/typography/README.md:
--------------------------------------------------------------------------------
1 | # @spartan-ng/helm/typography
2 |
3 | Secondary entry point of `@spartan-ng/helm`. It can be used by importing from `@spartan-ng/helm/typography`.
4 |
--------------------------------------------------------------------------------
/libs/helm/typography/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "lib": {
3 | "entryFile": "src/index.ts"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/libs/helm/typography/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/hlm-blockquote.directive';
2 | export * from './lib/hlm-code.directive';
3 | export * from './lib/hlm-h1.directive';
4 | export * from './lib/hlm-h2.directive';
5 | export * from './lib/hlm-h3.directive';
6 | export * from './lib/hlm-h4.directive';
7 | export * from './lib/hlm-large.directive';
8 | export * from './lib/hlm-lead.directive';
9 | export * from './lib/hlm-muted.directive';
10 | export * from './lib/hlm-p.directive';
11 | export * from './lib/hlm-small.directive';
12 | export * from './lib/hlm-ul.directive';
13 |
--------------------------------------------------------------------------------
/libs/helm/typography/src/lib/hlm-h1.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | export const hlmH1 = 'scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl';
6 |
7 | @Directive({
8 | selector: '[hlmH1]',
9 | standalone: true,
10 | host: {
11 | '[class]': '_computedClass()',
12 | },
13 | })
14 | export class HlmH1Directive {
15 | public readonly userClass = input('', { alias: 'class' });
16 | protected _computedClass = computed(() => hlm(hlmH1, this.userClass()));
17 | }
18 |
--------------------------------------------------------------------------------
/libs/helm/typography/src/lib/hlm-h3.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | export const hlmH3 = 'scroll-m-20 text-2xl font-semibold tracking-tight';
6 |
7 | @Directive({
8 | selector: '[hlmH3]',
9 | standalone: true,
10 | host: {
11 | '[class]': '_computedClass()',
12 | },
13 | })
14 | export class HlmH3Directive {
15 | public readonly userClass = input('', { alias: 'class' });
16 | protected _computedClass = computed(() => hlm(hlmH3, this.userClass()));
17 | }
18 |
--------------------------------------------------------------------------------
/libs/helm/typography/src/lib/hlm-h4.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | export const hlmH4 = 'scroll-m-20 text-xl font-semibold tracking-tight';
6 |
7 | @Directive({
8 | selector: '[hlmH4]',
9 | standalone: true,
10 | host: {
11 | '[class]': '_computedClass()',
12 | },
13 | })
14 | export class HlmH4Directive {
15 | public readonly userClass = input('', { alias: 'class' });
16 | protected _computedClass = computed(() => hlm(hlmH4, this.userClass()));
17 | }
18 |
--------------------------------------------------------------------------------
/libs/helm/typography/src/lib/hlm-large.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | export const hlmLarge = 'text-lg font-semibold';
6 |
7 | @Directive({
8 | selector: '[hlmLarge]',
9 | standalone: true,
10 | host: {
11 | '[class]': '_computedClass()',
12 | },
13 | })
14 | export class HlmLargeDirective {
15 | public readonly userClass = input('', { alias: 'class' });
16 | protected _computedClass = computed(() => hlm(hlmLarge, this.userClass()));
17 | }
18 |
--------------------------------------------------------------------------------
/libs/helm/typography/src/lib/hlm-lead.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | export const hlmLead = 'text-xl text-muted-foreground';
6 |
7 | @Directive({
8 | selector: '[hlmLead]',
9 | standalone: true,
10 | host: {
11 | '[class]': '_computedClass()',
12 | },
13 | })
14 | export class HlmLeadDirective {
15 | public readonly userClass = input('', { alias: 'class' });
16 | protected _computedClass = computed(() => hlm(hlmLead, this.userClass()));
17 | }
18 |
--------------------------------------------------------------------------------
/libs/helm/typography/src/lib/hlm-muted.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | export const hlmMuted = 'text-sm text-muted-foreground';
6 |
7 | @Directive({
8 | selector: '[hlmMuted]',
9 | standalone: true,
10 | host: {
11 | '[class]': '_computedClass()',
12 | },
13 | })
14 | export class HlmMutedDirective {
15 | public readonly userClass = input('', { alias: 'class' });
16 | protected _computedClass = computed(() => hlm(hlmMuted, this.userClass()));
17 | }
18 |
--------------------------------------------------------------------------------
/libs/helm/typography/src/lib/hlm-p.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | export const hlmP = 'leading-7 [&:not(:first-child)]:mt-6';
6 |
7 | @Directive({
8 | selector: '[hlmP]',
9 | standalone: true,
10 | host: {
11 | '[class]': '_computedClass()',
12 | },
13 | })
14 | export class HlmPDirective {
15 | public readonly userClass = input('', { alias: 'class' });
16 | protected _computedClass = computed(() => hlm(hlmP, this.userClass()));
17 | }
18 |
--------------------------------------------------------------------------------
/libs/helm/typography/src/lib/hlm-small.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | export const hlmSmall = 'text-sm font-medium leading-none';
6 |
7 | @Directive({
8 | selector: '[hlmSmall]',
9 | standalone: true,
10 | host: {
11 | '[class]': '_computedClass()',
12 | },
13 | })
14 | export class HlmSmallDirective {
15 | public readonly userClass = input('', { alias: 'class' });
16 | protected _computedClass = computed(() => hlm(hlmSmall, this.userClass()));
17 | }
18 |
--------------------------------------------------------------------------------
/libs/helm/typography/src/lib/hlm-ul.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, computed, input } from '@angular/core';
2 | import { hlm } from '@spartan-ng/brain/core';
3 | import type { ClassValue } from 'clsx';
4 |
5 | export const hlmUl = 'my-6 ml-6 list-disc [&>li]:mt-2';
6 |
7 | @Directive({
8 | selector: '[hlmUl]',
9 | standalone: true,
10 | host: {
11 | '[class]': '_computedClass()',
12 | },
13 | })
14 | export class HlmUlDirective {
15 | public readonly userClass = input('', { alias: 'class' });
16 | protected _computedClass = computed(() => hlm(hlmUl, this.userClass()));
17 | }
18 |
--------------------------------------------------------------------------------
/libs/tools/README.md:
--------------------------------------------------------------------------------
1 | # tools
2 |
3 | This library was generated with [Nx](https://nx.dev).
4 |
5 | ## Building
6 |
7 | Run `nx build tools` to build the library.
8 |
9 | ## Running unit tests
10 |
11 | Run `nx test tools` to execute the unit tests via [Jest](https://jestjs.io).
12 |
--------------------------------------------------------------------------------
/libs/tools/jest.config.ts:
--------------------------------------------------------------------------------
1 | export default {
2 | displayName: 'tools',
3 | preset: '../../jest.preset.cjs',
4 | transform: {
5 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }],
6 | },
7 | moduleFileExtensions: ['ts', 'js', 'html'],
8 | coverageDirectory: '../../coverage/libs/tools',
9 | };
10 |
--------------------------------------------------------------------------------
/libs/tools/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@spartan-ng/tools",
3 | "version": "0.0.1-alpha.380",
4 | "private": true,
5 | "type": "commonjs",
6 | "dependencies": {
7 | "@angular/core": "19.2.1",
8 | "@nx/angular": "20.5.0",
9 | "@nx/devkit": "20.5.0",
10 | "@phenomnomnominal/tsquery": "^6.1.3",
11 | "enquirer": "2.3.6",
12 | "jsonc-eslint-parser": "^2.1.0",
13 | "nx": "20.5.0",
14 | "process": "0.11.10",
15 | "ts-morph": "25.0.1",
16 | "tslib": "~2.7.0",
17 | "typescript": "~5.7.3"
18 | },
19 | "executors": "./executors.json",
20 | "generators": "./generators.json"
21 | }
22 |
--------------------------------------------------------------------------------
/libs/tools/src/executors/docs/generate-ui-docs/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface GenerateUiDocsExecutorSchema {
2 | outputDir: string;
3 | outputFile: string;
4 | brainDir: string;
5 | uiDir: string;
6 | }
7 |
--------------------------------------------------------------------------------
/libs/tools/src/executors/release/build-update-publish/schema.d.ts:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line @typescript-eslint/no-empty-object-type
2 | export type BuildUpdatePublishExecutorSchema = {};
3 |
--------------------------------------------------------------------------------
/libs/tools/src/executors/release/build-update-publish/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "version": 2,
4 | "title": "BuildUpdatePublish executor",
5 | "description": "",
6 | "type": "object",
7 | "properties": {}
8 | }
9 |
--------------------------------------------------------------------------------
/libs/tools/src/executors/release/helpers/projects.helpers.ts:
--------------------------------------------------------------------------------
1 | import type { ExecutorContext } from '@nx/devkit';
2 |
3 | export function getProjectName(context: ExecutorContext): string {
4 | return context.projectName;
5 | }
6 |
7 | export function getRoot(context: ExecutorContext): string {
8 | const projectsConfiguration = context.projectsConfigurations.projects;
9 | const projectName = getProjectName(context);
10 | return projectsConfiguration[projectName].root;
11 | }
12 |
--------------------------------------------------------------------------------
/libs/tools/src/executors/release/npm-publish/schema.d.ts:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line @typescript-eslint/no-empty-object-type
2 | export type NpmPublishExecutorSchema = {};
3 |
--------------------------------------------------------------------------------
/libs/tools/src/executors/release/npm-publish/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "version": 2,
4 | "title": "NPM publish executor",
5 | "description": "",
6 | "type": "object",
7 | "properties": {}
8 | }
9 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/auto-increment-version/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/schema",
3 | "$id": "AutoIncrementVersionGenerator",
4 | "title": "",
5 | "type": "object",
6 | "properties": {}
7 | }
8 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/brain-secondary-entrypoint/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface BrainSecondaryEntrypointGeneratorSchema {
2 | name: string;
3 | }
4 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/brain-secondary-entrypoint/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/schema",
3 | "$id": "BrainSecondaryEntrypoint",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "name": {
8 | "type": "string",
9 | "description": "The name of the secondary entrypoint to create.",
10 | "$default": {
11 | "$source": "argv",
12 | "index": 0
13 | },
14 | "x-prompt": "What name would you like to use?"
15 | }
16 | },
17 | "required": ["name"]
18 | }
19 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/helm-component/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface HelmComponentGeneratorSchema {
2 | entrypoint: string;
3 | componentName: string;
4 | }
5 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/helm-directive/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface HelmDirectiveGeneratorSchema {
2 | entrypoint: string;
3 | directiveName: string;
4 | }
5 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/helm-documentation/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface HelmDocumentationGeneratorSchema {
2 | name: string;
3 | description: string;
4 | }
5 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/helm-documentation/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json-schema.org/schema",
3 | "$id": "HelmDocumentation",
4 | "title": "",
5 | "type": "object",
6 | "properties": {
7 | "name": {
8 | "type": "string",
9 | "description": "",
10 | "$default": {
11 | "$source": "argv",
12 | "index": 0
13 | },
14 | "x-prompt": "What name would you like to use?"
15 | },
16 | "description": {
17 | "type": "string",
18 | "description": "The description of the library."
19 | }
20 | },
21 | "required": ["name"]
22 | }
23 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/helm-secondary-entrypoint/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface HelmSecondaryEntrypointGeneratorSchema {
2 | name: string;
3 | story?: boolean;
4 | documentation?: boolean;
5 | generate?: 'component' | 'directive' | 'none';
6 | description?: string;
7 | }
8 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/helm-story/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface HelmStoryGeneratorSchema {
2 | entrypoint: string;
3 | componentName: string;
4 | }
5 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/hlm-to-cli-generator/files/generator.ts.template:
--------------------------------------------------------------------------------
1 | import { Tree } from '@nx/devkit';
2 | import hlmBaseGenerator from '../../../base/generator';
3 | import type { HlmBaseGeneratorSchema } from '../../../base/schema';
4 |
5 | export async function generator(tree: Tree, options: HlmBaseGeneratorSchema) {
6 | return await hlmBaseGenerator(tree, {...options, primitiveName: '<%= primitiveName %>', internalName: '<%= internalName %>', publicName: '<%= publicName %>'});
7 | }
8 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/hlm-to-cli-generator/lib/add-primitive-to-supported-ui-libraries.ts:
--------------------------------------------------------------------------------
1 | import type { Tree } from '@nx/devkit';
2 | import { updateJson } from 'nx/src/generators/utils/json';
3 |
4 | export const addPrimitiveToSupportedUILibraries = (
5 | tree: Tree,
6 | supportedJsonPath: string,
7 | generatorName: string,
8 | internalName: string,
9 | peerDependencies: Record,
10 | ) => {
11 | updateJson(tree, supportedJsonPath, (old) => ({
12 | ...old,
13 | [generatorName]: {
14 | internalName,
15 | peerDependencies,
16 | },
17 | }));
18 | };
19 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/hlm-to-cli-generator/schema.d.ts:
--------------------------------------------------------------------------------
1 | export interface HlmToCliGeneratorGeneratorSchema {
2 | additionalDependencies?: string;
3 | }
4 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/hlm-to-cli-generator/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "$id": "HlmToCliGenerator",
4 | "title": "",
5 | "type": "object",
6 | "properties": {}
7 | }
8 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/replace-cli-version/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/schema",
3 | "$id": "ReplaceCliVersionGenerator",
4 | "title": "",
5 | "type": "object",
6 | "properties": {}
7 | }
8 |
--------------------------------------------------------------------------------
/libs/tools/src/generators/replace-ui-version/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "version": 2,
4 | "title": "Update version executor",
5 | "description": "",
6 | "type": "object",
7 | "properties": {}
8 | }
9 |
--------------------------------------------------------------------------------
/libs/tools/src/index.ts:
--------------------------------------------------------------------------------
1 | console.log('I should not be blank.');
2 |
--------------------------------------------------------------------------------
/libs/tools/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base.json",
3 | "compilerOptions": {
4 | "module": "commonjs"
5 | },
6 | "files": [],
7 | "include": [],
8 | "references": [
9 | {
10 | "path": "./tsconfig.lib.json"
11 | },
12 | {
13 | "path": "./tsconfig.spec.json"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/libs/tools/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "declaration": true,
6 | "types": ["node"]
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/libs/tools/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"]
7 | },
8 | "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/libs/trpc/README.md:
--------------------------------------------------------------------------------
1 | # tRPC
2 |
3 | Spartan tRPC integration
4 |
5 | Learn more at [spartan.ng](https://spartan.ng)
6 |
--------------------------------------------------------------------------------
/libs/trpc/migrations/migration.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json",
3 | "schematics": {},
4 | "packageJsonUpdates": {
5 | "0.2.30": {
6 | "version": "0.2.29",
7 | "description": "Updates the superjson dependency from 1.x to 2.x",
8 | "packages": {
9 | "superjson": {
10 | "version": "^2.2.1",
11 | "alwaysAddToPackageJson": true
12 | }
13 | }
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/libs/trpc/ng-package.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3 | "dest": "../../dist/libs/trpc",
4 | "assets": ["*.md", "migrations/migration.json"],
5 | "lib": {
6 | "entryFile": "src/index.ts"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/libs/trpc/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/client/client';
2 | export * from './lib/server/server';
3 | export * from './lib/utils/wait-for';
4 |
5 | export { CreateTrpcProxyClient } from './lib/client/trpc-rxjs-proxy';
6 |
--------------------------------------------------------------------------------
/libs/trpc/src/test-setup.ts:
--------------------------------------------------------------------------------
1 | import '@analogjs/vite-plugin-angular/setup-vitest';
2 | import '@angular/compiler';
3 |
4 | /**
5 | * Initialize TestBed for all tests inside of router
6 | */
7 | import { TestBed } from '@angular/core/testing';
8 | import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
9 |
10 | TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
11 |
--------------------------------------------------------------------------------
/libs/trpc/tsconfig.lib.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "declaration": true,
6 | "declarationMap": true,
7 | "inlineSources": true,
8 | "types": ["node"]
9 | },
10 | "exclude": ["src/**/*.spec.ts", "jest.config.ts", "src/**/*.test.ts"],
11 | "include": ["src/**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/libs/trpc/tsconfig.lib.prod.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.lib.json",
3 | "compilerOptions": {
4 | "declarationMap": false
5 | },
6 | "angularCompilerOptions": {
7 | "compilationMode": "partial"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/libs/trpc/vite.config.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | import { defineConfig } from 'vite';
4 |
5 | // https://vitejs.dev/config/
6 | export default defineConfig(({ mode }) => {
7 | return {
8 | root: 'src',
9 | test: {
10 | passWithNoTests: true,
11 | globals: true,
12 | environment: 'jsdom',
13 | setupFiles: ['src/test-setup.ts'],
14 | include: ['**/*.spec.ts'],
15 | cache: {
16 | dir: '../../node_modules/.vitest',
17 | },
18 | },
19 | define: {
20 | 'import.meta.vitest': mode !== 'production',
21 | },
22 | };
23 | });
24 |
--------------------------------------------------------------------------------
/tools/eslint-rules/jest.config.ts:
--------------------------------------------------------------------------------
1 | export default {
2 | displayName: 'eslint-rules',
3 | preset: '../../jest.preset.cjs',
4 | transform: {
5 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }],
6 | },
7 | moduleFileExtensions: ['ts', 'js', 'html'],
8 | coverageDirectory: '../../coverage/tools/eslint-rules',
9 | };
10 |
--------------------------------------------------------------------------------
/tools/eslint-rules/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "eslint-rules",
3 | "$schema": "../../node_modules/nx/schemas/project-schema.json",
4 | "sourceRoot": "tools/eslint-rules",
5 | "targets": {
6 | "test": {
7 | "executor": "@nx/jest:jest",
8 | "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
9 | "options": {
10 | "jestConfig": "tools/eslint-rules/jest.config.ts"
11 | }
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/tools/eslint-rules/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base.json",
3 | "compilerOptions": {
4 | "moduleResolution": "node16",
5 | "module": "node16"
6 | },
7 | "files": [],
8 | "include": [],
9 | "references": [
10 | {
11 | "path": "./tsconfig.lint.json"
12 | },
13 | {
14 | "path": "./tsconfig.spec.json"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/tools/eslint-rules/tsconfig.lint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "types": ["node"]
6 | },
7 | "exclude": ["**/*.spec.ts"],
8 | "include": ["**/*.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/tools/eslint-rules/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "types": ["jest", "node"]
6 | },
7 | "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/tools/scripts/drizzle-migrate.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'drizzle-kit';
2 |
3 | export default defineConfig({
4 | dialect: 'postgresql',
5 | dbCredentials: {
6 | url: `${process.env['DATABASE_URL']}`,
7 | },
8 | });
9 |
--------------------------------------------------------------------------------
/tools/tsconfig.tools.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.base.json",
3 | "compilerOptions": {
4 | "outDir": "../dist/out-tsc/tools",
5 | "rootDir": ".",
6 | "module": "commonjs",
7 | "target": "es5",
8 | "types": ["node"],
9 | "importHelpers": false
10 | },
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/zerops-import-example.yml:
--------------------------------------------------------------------------------
1 | project:
2 | name: spartan-ng
3 | corePackage: LIGHT
4 | tags:
5 | - spartan-recipe
6 |
7 | services:
8 | - hostname: db
9 | type: postgresql@16
10 | mode: NON_HA
11 | priority: 100
12 |
13 | - hostname: spartanng
14 | type: nodejs@22
15 | buildFromGit: https://github.com/spartan-ng/spartan
16 | enableSubdomainAccess: true
17 | verticalAutoscaling:
18 | minRam: 0.50
19 |
--------------------------------------------------------------------------------