@ngstarter-ui/components 1.0.35 → 1.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -13,11 +13,12 @@
|
|
|
13
13
|
"recipes": [
|
|
14
14
|
{
|
|
15
15
|
"name": "admin-dashboard",
|
|
16
|
-
"description": "Build admin dashboards from NgStarter UI primitives instead of hand-rolled shell, cards, forms, tables, and pagination.",
|
|
16
|
+
"description": "Build admin dashboards from NgStarter UI primitives instead of hand-rolled shell, cards, forms, datatables, static tables, and pagination.",
|
|
17
17
|
"mustUse": [
|
|
18
18
|
"@ngstarter-ui/components/sidenav",
|
|
19
19
|
"@ngstarter-ui/components/navigation",
|
|
20
20
|
"@ngstarter-ui/components/card",
|
|
21
|
+
"@ngstarter-ui/components/data-view",
|
|
21
22
|
"@ngstarter-ui/components/table",
|
|
22
23
|
"@ngstarter-ui/components/form-field",
|
|
23
24
|
"@ngstarter-ui/components/input",
|
|
@@ -43,7 +44,13 @@
|
|
|
43
44
|
"CardContent",
|
|
44
45
|
"CardFooter"
|
|
45
46
|
],
|
|
46
|
-
"
|
|
47
|
+
"datatables": [
|
|
48
|
+
"DataView"
|
|
49
|
+
],
|
|
50
|
+
"operationalDatasets": [
|
|
51
|
+
"DataView"
|
|
52
|
+
],
|
|
53
|
+
"staticTables": [
|
|
47
54
|
"Table",
|
|
48
55
|
"ColumnDef",
|
|
49
56
|
"HeaderCell",
|
|
@@ -76,7 +83,9 @@
|
|
|
76
83
|
]
|
|
77
84
|
},
|
|
78
85
|
"mustNot": [
|
|
79
|
-
"Do not build admin
|
|
86
|
+
"Do not build datatables or operational admin datasets with role=\"table\", plain table markup, or div grids when DataView fits.",
|
|
87
|
+
"Do not use DataView for purely static/read-only tabular content when ngs-table fits.",
|
|
88
|
+
"Do not build static/read-only tables with role=\"table\" div grids when ngs-table fits.",
|
|
80
89
|
"Do not build search fields with plain input when ngs-form-field and ngsInput fit.",
|
|
81
90
|
"Do not build navigation menus with plain button lists when ngs-navigation fits.",
|
|
82
91
|
"Do not build KPI cards with plain article/div cards when ngs-card fits.",
|
|
@@ -2556,8 +2565,8 @@
|
|
|
2556
2565
|
"sourceRoot": "projects/components/core/src",
|
|
2557
2566
|
"docsPath": null,
|
|
2558
2567
|
"docsOverviewSource": null,
|
|
2559
|
-
"purpose": "Provide
|
|
2560
|
-
"useWhen": "
|
|
2568
|
+
"purpose": "Provide infrastructure primitives, theme setup, services, directives, pipes, tokens, and low-level utilities.",
|
|
2569
|
+
"useWhen": "Use @ngstarter-ui/components/core for infrastructure, not for building screens directly. Use provideNgsTheme in app config to set theme, colorScheme, density, radius, primaryColor, persistence, and storageKey. Inject ThemeManagerService for runtime theme, color scheme, density, radius, and primary color changes. Use utility directives such as ngsRipple, ngsAutoFocus, ngsFocusElement, ngsTextareaAutoSize, and ngsDebounceTime when a specific low-level behavior is needed. Use pipes such as InitialsPipe, FormatFileSizePipe, SafeHtmlPipe, SafeResourceUrlPipe, OrderByPipe, FilterByPropertyPipe, and SearchByPropertyPipe when they fit. Use ErrorStateMatcher or ShowOnDirtyErrorStateMatcher for form error behavior, and observer/services/utils only for low-level infrastructure. Do not use core as a replacement for real UI components. Do not build admin screens from core primitives; choose concrete components such as Button, Card, DataView, Table, FormField, Dialog, Navigation, Layout, or other component entry points. Do not import Option from core directly for ordinary option lists when Select, Autocomplete, or another component owns the option pattern.",
|
|
2561
2570
|
"exampleTopics": [],
|
|
2562
2571
|
"minimalExample": null,
|
|
2563
2572
|
"exampleFiles": [],
|
|
@@ -2854,7 +2863,7 @@
|
|
|
2854
2863
|
"docsPath": "/libraries/data-view",
|
|
2855
2864
|
"docsOverviewSource": "projects/docs/src/app/libraries/data-view/overview/overview.html",
|
|
2856
2865
|
"purpose": "Build operational data grids for records that users need to inspect, organize, select, and act on.",
|
|
2857
|
-
"useWhen": "Use for admin screens, CRM and ERP records, users, orders, invoices, logs, tasks, assets, and any dataset where the table is the main work surface. DataView
|
|
2866
|
+
"useWhen": "Use for datatables and working data surfaces in admin screens, CRM and ERP records, users, orders, invoices, logs, tasks, assets, and any dataset where the table is the main interactive work surface. Choose DataView when users need row actions, selection, sorting, search/filter state, pagination, loading or empty states, column resizing, column visibility/order, pinned or sticky columns, custom cell renderers, refresh, snapshots, server-side data, or ngsDataViewActionBar. DataView is configured with columnDefs plus local data or a server-side datasource. Do not use for small static tables or simple read-only tabular content; use Table. Do not use as a card list, layout grid, chart widget, report summary, or form editor.",
|
|
2858
2867
|
"exampleTopics": [
|
|
2859
2868
|
"Data View",
|
|
2860
2869
|
"Basic data view",
|
|
@@ -4123,8 +4132,8 @@
|
|
|
4123
4132
|
"sourceRoot": "projects/components/grid/src",
|
|
4124
4133
|
"docsPath": "/components/grid",
|
|
4125
4134
|
"docsOverviewSource": "projects/docs/src/app/components/grid/overview/overview.html",
|
|
4126
|
-
"purpose": "Render
|
|
4127
|
-
"useWhen": "Use
|
|
4135
|
+
"purpose": "Render static dashboard widgets in a predefined 12-column layout.",
|
|
4136
|
+
"useWhen": "Use ngs-grid when the application defines a static dashboard or widget layout and users do not need to rearrange, customize, or save the dashboard order. Provide configs that map item types to components and items with id, type, columns, height, content, skeletonHeight, and children. Widgets can inject GRID and call markItemAsLoaded(id), especially with waitWhenAllItemsLoaded. Use Grid for fixed analytics sections, portal start pages, and nested dashboard sections where the structure is known. Do not use Grid as a normal CSS layout helper for forms, pages, cards, or repeated elements; use TailwindCSS grid/flex classes. Do not use Grid for dashboards users can rearrange or change; use Tiles. Do not use for tables or datasets; use Table or DataView. Do not use for file/media grids; use upload/media components.",
|
|
4128
4137
|
"exampleTopics": [],
|
|
4129
4138
|
"minimalExample": null,
|
|
4130
4139
|
"exampleFiles": [],
|
|
@@ -5108,7 +5117,7 @@
|
|
|
5108
5117
|
"docsPath": "/components/layout",
|
|
5109
5118
|
"docsOverviewSource": "projects/docs/src/app/components/layout/overview/overview.html",
|
|
5110
5119
|
"purpose": "Provide the base top-level shell for an application, admin area, dashboard, or large workspace page.",
|
|
5111
|
-
"useWhen": "Use ngs-layout as the outer structural frame when the whole screen needs topbar, header, sidebar, scrollable content, aside, or footer regions. Use root for a full viewport application shell. Use ngs-layout-content for the main scroll container, and LayoutApiService with layoutId when the sidebar must be shown, hidden, or toggled. Nested layouts are appropriate when a large app shell contains another structured workspace with its own header/content/footer. Do not use Layout as a small wrapper, card, spacing helper, form grouping tool, or generic grid system. Use TailwindCSS grid, flex, and spacing classes inside layout regions. Use Grid for dashboard widgets, DataView or Table for datasets, Drawer for overlay side panels, and Navigation, Sidebar, or Sidenav components inside sidebars.",
|
|
5120
|
+
"useWhen": "Use ngs-layout as the outer structural frame when the whole screen needs topbar, header, sidebar, scrollable content, aside, or footer regions. Use root for a full viewport application shell. Use ngs-layout-content for the main scroll container, and LayoutApiService with layoutId when the sidebar must be shown, hidden, or toggled. Nested layouts are appropriate when a large app shell contains another structured workspace with its own header/content/footer. Do not use Layout as a small wrapper, card, spacing helper, form grouping tool, or generic grid system. Use TailwindCSS grid, flex, and spacing classes inside layout regions. Use Grid for static dashboard widgets, Tiles for dashboards users can rearrange or customize, DataView or Table for datasets, Drawer for overlay side panels, and Navigation, Sidebar, or Sidenav components inside sidebars.",
|
|
5112
5121
|
"exampleTopics": [
|
|
5113
5122
|
"Layout header",
|
|
5114
5123
|
"Layout sidebar",
|
|
@@ -6123,8 +6132,8 @@
|
|
|
6123
6132
|
"sourceRoot": "projects/components/overlay/src",
|
|
6124
6133
|
"docsPath": null,
|
|
6125
6134
|
"docsOverviewSource": null,
|
|
6126
|
-
"purpose": "
|
|
6127
|
-
"useWhen": "Use
|
|
6135
|
+
"purpose": "Provide low-level shared positioning utilities for components that create Angular CDK floating overlays.",
|
|
6136
|
+
"useWhen": "Use Overlay only when implementing a new NgStarter component or custom directive that directly manages Angular CDK Overlay, portal rendering, backdrop or outside-click behavior, close behavior, keyboard/focus handling, and anchored positioning. Use OverlayPosition values such as below-start, below-center, below-end, above-*, before-*, and after-*. Use new PositionManager().build(position) to create fallback ConnectedPosition[] pairs. Do not use Overlay directly when building a normal admin page or feature screen. Prefer higher-level components: Menu for action dropdowns and context menus, Popover for lightweight anchored content, Dialog for modal workflows, Drawer for side overlays, Select/Autocomplete/Datepicker/ColorPicker for form dropdowns, and Tooltip for simple hints.",
|
|
6128
6137
|
"exampleTopics": [],
|
|
6129
6138
|
"minimalExample": null,
|
|
6130
6139
|
"exampleFiles": [],
|
|
@@ -6150,8 +6159,8 @@
|
|
|
6150
6159
|
"sourceRoot": "projects/components/page-loading-bar/src",
|
|
6151
6160
|
"docsPath": null,
|
|
6152
6161
|
"docsOverviewSource": null,
|
|
6153
|
-
"purpose": "Show
|
|
6154
|
-
"useWhen": "Use
|
|
6162
|
+
"purpose": "Show a global thin loading bar during Angular Router navigation.",
|
|
6163
|
+
"useWhen": "Use ngs-page-loading-bar once in the top-level app shell or root layout, usually near the root layout or router outlet, to provide navigation feedback. It listens to Angular Router events automatically: NavigationStart shows the bar, and NavigationEnd, NavigationCancel, or NavigationError finish it. Use fixed when the bar should stay attached to the viewport. Do not use PageLoadingBar for loading a specific block, table, card, form, submit/save/upload operation, or async work inside a page. Use ProgressBar, ProgressSpinner, BlockLoader, Skeleton, ScreenLoader, or the component-specific loading state for local loading. Do not use it as a real task completion percentage; it is route navigation feedback only.",
|
|
6155
6164
|
"exampleTopics": [],
|
|
6156
6165
|
"minimalExample": null,
|
|
6157
6166
|
"exampleFiles": [],
|
|
@@ -6183,8 +6192,8 @@
|
|
|
6183
6192
|
"sourceRoot": "projects/components/paginator/src",
|
|
6184
6193
|
"docsPath": "/components/paginator",
|
|
6185
6194
|
"docsOverviewSource": "projects/docs/src/app/components/paginator/overview/overview.html",
|
|
6186
|
-
"purpose": "
|
|
6187
|
-
"useWhen": "Use
|
|
6195
|
+
"purpose": "Control pages of a dataset with range label, previous/next navigation, optional first/last buttons, and page size selection.",
|
|
6196
|
+
"useWhen": "Use ngs-paginator next to paged tables, DataView screens, search results, record lists, and server-side browsing. Provide length for total records, pageSize for records per page, zero-based pageIndex for the current page, and pageSizeOptions for allowed page sizes. Handle the page event to update local data or request the next page from an API; PageEvent includes previousPageIndex, pageIndex, pageSize, and length. Use hidePageSize when the page size is fixed. Use showFirstLastButtons when users need quick first/last navigation. Use PaginatorIntl to localize labels and range text. Do not use Paginator for app route navigation; use Navigation, Tabs, or Breadcrumbs. Do not use for wizard or onboarding steps; use Stepper or HeadlessStepper. Do not use for carousel slides, media browsing, or standalone UI without a paged dataset. If DataView already owns pagination, use its pagination model instead of adding a separate paginator.",
|
|
6188
6197
|
"exampleTopics": [
|
|
6189
6198
|
"Basic Paginator",
|
|
6190
6199
|
"Configurable Paginator"
|
|
@@ -6261,8 +6270,8 @@
|
|
|
6261
6270
|
"sourceRoot": "projects/components/panel/src",
|
|
6262
6271
|
"docsPath": "/components/panel",
|
|
6263
6272
|
"docsOverviewSource": "projects/docs/src/app/components/panel/overview/overview.html",
|
|
6264
|
-
"purpose": "
|
|
6265
|
-
"useWhen": "Use for dashboard sections,
|
|
6273
|
+
"purpose": "Create a local structured work area with header, subheader, sidebar, scrollable content, aside, and footer regions.",
|
|
6274
|
+
"useWhen": "Use ngs-panel inside a page or workspace for admin modules, settings areas, editors, detail panes, inspectors, dashboard sections, and local surfaces that need their own header, footer, side columns, and scrollable body. Use ngs-panel-header for local title, toolbar, or actions; ngs-panel-subheader for filters or secondary status; ngs-panel-sidebar for a local left column; ngs-panel-content for the main scrollable area; ngs-panel-aside for a local right column; and ngs-panel-footer for local footer actions or status. Use absolute when the panel should fill the parent bounds. Use TailwindCSS classes for sizing, borders, spacing, and inner layout. Do not use Panel as the top-level application shell; use Layout. Do not use for small content blocks; use Card. Do not use for overlay side panels; use Drawer. Do not use as a generic spacing wrapper or form grid; use TailwindCSS grid/flex and FormField.",
|
|
6266
6275
|
"exampleTopics": [
|
|
6267
6276
|
"Basic panel",
|
|
6268
6277
|
"Basic with extra columns (sidebar and aside)",
|
|
@@ -6327,8 +6336,8 @@
|
|
|
6327
6336
|
"sourceRoot": "projects/components/password-strength/src",
|
|
6328
6337
|
"docsPath": "/forms/password-strength",
|
|
6329
6338
|
"docsOverviewSource": "projects/docs/src/app/forms/password-strength/overview/overview.html",
|
|
6330
|
-
"purpose": "Show password
|
|
6331
|
-
"useWhen": "Use in signup, reset password, account security, and credential forms.",
|
|
6339
|
+
"purpose": "Show real-time password strength feedback and requirement status while users create or change a password.",
|
|
6340
|
+
"useWhen": "Use PasswordStrength in signup, reset password, change password, account security, and credential setup forms. Use input type=\"password\" ngsInput inside one ngs-form-field for the actual password field, then place ngs-password-strength [password]=\"password.value\" below it for the strength bar. Use ngs-password-strength-info with a template reference to the strength component when users need to see requirement status for lowercase, uppercase, digit, special character, min length, or custom rules. Use ngs-pass-toggle-visibility as a suffix control inside the password form field when users need show/hide password behavior. Configure min, max, enableLengthRule, enableDigitRule, enableSpecialCharRule, and customValidator as needed, and listen to strengthChanged when the screen needs the score. Do not use PasswordStrength for OTP, MFA, invite codes, or passcodes; use PinInput. Do not use for generic text validation. Do not use for a login password field unless the user is creating or changing a password and strength feedback is useful. Do not rely on it as the only password security policy; backend validation is still required.",
|
|
6332
6341
|
"exampleTopics": [
|
|
6333
6342
|
"Basic password strength",
|
|
6334
6343
|
"Password strength info",
|
|
@@ -6420,8 +6429,8 @@
|
|
|
6420
6429
|
"sourceRoot": "projects/components/phone-input/src",
|
|
6421
6430
|
"docsPath": "/forms/phone-input",
|
|
6422
6431
|
"docsOverviewSource": "projects/docs/src/app/forms/phone-input/overview/overview.html",
|
|
6423
|
-
"purpose": "Capture phone numbers with country
|
|
6424
|
-
"useWhen": "Use
|
|
6432
|
+
"purpose": "Capture real phone numbers with country selection, flag, dial code, formatting, and libphonenumber-js validation.",
|
|
6433
|
+
"useWhen": "Use ngs-phone-input inside one ngs-form-field for profile, contact, billing, onboarding, checkout, support, invite, and contact forms when the value must be a real phone number. Use formControlName or ngModel, show invalidPhone with ngs-error, set defaultSelectedCountryCode when the initial country should not be us, use onlyCountries to restrict available countries, preferredCountries to pin common countries to the top, format=\"default | national | international\" for display formatting, and countryChanged when the screen needs to react to country changes. Do not use plain ngsInput, NumberInput, or InputMask for country-aware phone numbers. Do not use CountrySelect instead of PhoneInput; CountrySelect chooses a country but does not capture a phone number. Do not use for OTP, MFA, passcodes, or invite codes; use PinInput.",
|
|
6425
6434
|
"exampleTopics": [
|
|
6426
6435
|
"Basic phone input",
|
|
6427
6436
|
"Phone input with custom country list",
|
|
@@ -6496,8 +6505,8 @@
|
|
|
6496
6505
|
"sourceRoot": "projects/components/pin-input/src",
|
|
6497
6506
|
"docsPath": "/forms/pin-input",
|
|
6498
6507
|
"docsOverviewSource": "projects/docs/src/app/forms/pin-input/overview/overview.html",
|
|
6499
|
-
"purpose": "Capture short
|
|
6500
|
-
"useWhen": "Use for OTP, MFA, invite codes, passcodes,
|
|
6508
|
+
"purpose": "Capture short one-character-per-cell codes for verification and secure access flows.",
|
|
6509
|
+
"useWhen": "Use ngs-pin-input as a standalone form control for OTP, MFA, SMS or email verification codes, invite codes, passcodes, payment verification, and secure access codes. Use ngModel or formControlName, length for the number of cells, placeholder for the empty-cell hint, acceptOnly for allowed symbols with digits as the default, and disabled for disabled state. The component manages one-character cells and focus movement between them. Do not use PinInput for phone numbers; use PhoneInput. Do not use for creating or changing passwords; use ngsInput with PasswordStrength. Do not use for numeric settings or quantities; use NumberInput. Do not use for long codes, serial numbers, coupons, or arbitrary text; use a normal ngsInput. Do not wrap it in ngs-form-field as if it were a single text input; the component renders its own internal form fields.",
|
|
6501
6510
|
"exampleTopics": [
|
|
6502
6511
|
"Basic Pin Input",
|
|
6503
6512
|
"Placeholder",
|
|
@@ -6566,8 +6575,8 @@
|
|
|
6566
6575
|
"sourceRoot": "projects/components/popover/src",
|
|
6567
6576
|
"docsPath": "/components/popover",
|
|
6568
6577
|
"docsOverviewSource": "projects/docs/src/app/components/popover/overview/overview.html",
|
|
6569
|
-
"purpose": "Show lightweight contextual content anchored to
|
|
6570
|
-
"useWhen": "Use for
|
|
6578
|
+
"purpose": "Show lightweight contextual content in an overlay anchored to a trigger element.",
|
|
6579
|
+
"useWhen": "Use Popover for short details, previews, small interactive content, compact forms, and richer explanations that need more than a plain tooltip but do not require a modal workflow. Put ngsPopoverTriggerFor on the trigger element and point it to ngs-popover or a TemplateRef. Use trigger=\"click\" for explicit opening and trigger=\"hover\" only for preview-style content that can disappear safely. Use position for below/above/before/after placement. Use ngsPopoverContext with ngsPopoverContent for lazy content that needs trigger data. Use a raw TemplateRef only when the standard ngs-popover-panel wrapper should be replaced. Use hasBackdrop, closeOnOriginClick, closeOnOriginMouseLeave, and origin only when custom close or anchoring behavior is needed. Do not use Popover for command lists; use Menu. Do not use for short plain hints; use Tooltip. Do not use for modal workflows, confirmations, or complex forms; use Dialog or Confirm. Do not use for side panels; use Drawer. Do not use for form dropdowns; use Select, Autocomplete, Datepicker, or ColorPicker. Do not use low-level Overlay directly when Popover fits.",
|
|
6571
6580
|
"exampleTopics": [
|
|
6572
6581
|
"Basic Popover",
|
|
6573
6582
|
"Show popover by hover",
|
|
@@ -6654,8 +6663,8 @@
|
|
|
6654
6663
|
"sourceRoot": "projects/components/progress-bar/src",
|
|
6655
6664
|
"docsPath": "/components/progress-bar",
|
|
6656
6665
|
"docsOverviewSource": "projects/docs/src/app/components/progress-bar/overview/overview.html",
|
|
6657
|
-
"purpose": "Show linear progress or
|
|
6658
|
-
"useWhen": "Use for uploads,
|
|
6666
|
+
"purpose": "Show linear progress for an operation or process.",
|
|
6667
|
+
"useWhen": "Use ngs-progress-bar for uploads, downloads, imports, setup completion, sync, processing, form completion, buffering, and other horizontal progress states. Use mode=\"determinate\" with value from 0 to 100 when the percentage is known. Use mode=\"indeterminate\" when work is happening but the percentage is unknown. Use mode=\"buffer\" with value and bufferValue when both primary and buffered progress should be visible. Use mode=\"query\" while waiting before known progress starts. Use animationEnd only when the screen must react after the transition finishes. Do not use ProgressBar for Angular Router navigation; use PageLoadingBar. Do not use to block a whole area; use BlockLoader. Do not use for skeleton content loading; use Skeleton. Do not use for circular KPI or percent metrics; use Gauge. Do not use for mini trends or charts; use MicroChart. Do not use as a status label; use Badge or text.",
|
|
6659
6668
|
"exampleTopics": [
|
|
6660
6669
|
"Basic Progress Bar",
|
|
6661
6670
|
"Intermediate Progress Bar",
|
|
@@ -6721,8 +6730,8 @@
|
|
|
6721
6730
|
"sourceRoot": "projects/components/radio/src",
|
|
6722
6731
|
"docsPath": "/forms/radio",
|
|
6723
6732
|
"docsOverviewSource": "projects/docs/src/app/forms/radio/overview/overview.html",
|
|
6724
|
-
"purpose": "Let users choose exactly one option from a visible set.",
|
|
6725
|
-
"useWhen": "Use for
|
|
6733
|
+
"purpose": "Let users choose exactly one option from a small visible set of mutually exclusive choices.",
|
|
6734
|
+
"useWhen": "Use ngs-radio-group with ngs-radio-button for simple text options in forms, settings, filters, and preference screens where all options should be visible and the user can choose only one. Put value on each radio button and bind the group value with value, ngModel, or formControlName. Use name when native form grouping matters, disabled on the group or individual radio button when needed, and change when the screen must react to selection changes. Do not use Radio for multiple selection; use Checkbox. Do not use for long option lists; use Select or Autocomplete. Do not use for rich options with descriptions, icons, or large clickable blocks; use RadioCard. Do not use as a segmented view switcher; use Segmented or ButtonToggle. Do not use for yes/no boolean settings when SlideToggle or Checkbox better matches the meaning.",
|
|
6726
6735
|
"exampleTopics": [
|
|
6727
6736
|
"Basic Radios",
|
|
6728
6737
|
"Radio Card",
|
|
@@ -6790,8 +6799,8 @@
|
|
|
6790
6799
|
"sourceRoot": "projects/components/radio-card/src",
|
|
6791
6800
|
"docsPath": null,
|
|
6792
6801
|
"docsOverviewSource": null,
|
|
6793
|
-
"purpose": "Let users choose one option from
|
|
6794
|
-
"useWhen": "Use for
|
|
6802
|
+
"purpose": "Let users choose exactly one option from a small set of rich card-like choices.",
|
|
6803
|
+
"useWhen": "Use ngs-radio-card-group as a form control group and ngs-radio-card for each option when every option needs a large clickable card with title, icon, description, or supporting content. Use ngs-radio-card-title for the option name and optional icon, ngs-radio-card-content for details, value on each card, and formControlName or ngModel on the group. Use TailwindCSS grid or flex around the group to lay cards out in columns or rows. Good for plan selection, privacy modes, template choices, payment methods, layout options, delivery methods, onboarding choices, and settings choices with explanation. Do not use for simple short text options; use Radio. Do not use for multiple selection; use Checkbox or a dedicated checkbox-card pattern when available. Do not use for long lists; use Select or Autocomplete. Do not use as a normal content card without selection; use Card. Do not use as a segmented mode switch; use Segmented or ButtonToggle.",
|
|
6795
6804
|
"exampleTopics": [],
|
|
6796
6805
|
"minimalExample": null,
|
|
6797
6806
|
"exampleFiles": [],
|
|
@@ -6844,8 +6853,8 @@
|
|
|
6844
6853
|
"sourceRoot": "projects/components/rail-nav/src",
|
|
6845
6854
|
"docsPath": "/navigation/rail-nav",
|
|
6846
6855
|
"docsOverviewSource": "projects/docs/src/app/navigation/rail-nav/overview/overview.html",
|
|
6847
|
-
"purpose": "Provide compact vertical navigation with icons and labels.",
|
|
6848
|
-
"useWhen": "Use
|
|
6856
|
+
"purpose": "Provide a compact vertical navigation rail with icons and short labels.",
|
|
6857
|
+
"useWhen": "Use ngs-rail-nav when an app or workspace shell needs compact vertical navigation but there is not enough space for a full sidebar. Use ngs-rail-nav-item or [ngs-rail-nav-item] for destinations, ngsRailNavItemIcon for icons, key on each item, activeKey on the rail, and railNav.api.isActive(key) when the active item should change icon or styling. Good for narrow editor or workspace navigation, secondary product navigation, compact admin shells, and switching between primary sections. Do not use when you need a full sidebar with groups, nested navigation, or supporting content; use Sidebar or Sidenav. Do not use inside ngs-sidebar because Sidebar has its own navigation. Do not use for normal section navigation in content; use Navigation. Do not use for tabs, breadcrumbs, menu actions, segmented controls, or one-off icon buttons.",
|
|
6849
6858
|
"exampleTopics": [
|
|
6850
6859
|
"Basic rail navigation",
|
|
6851
6860
|
"Rail navigation customization",
|
|
@@ -6928,8 +6937,8 @@
|
|
|
6928
6937
|
"sourceRoot": "projects/components/resizable-container/src",
|
|
6929
6938
|
"docsPath": "/components/resizable-container",
|
|
6930
6939
|
"docsOverviewSource": "projects/docs/src/app/components/resizable-container/overview/overview.html",
|
|
6931
|
-
"purpose": "Let users resize
|
|
6932
|
-
"useWhen": "Use for
|
|
6940
|
+
"purpose": "Let users manually resize the width of one container with a vertical drag handle.",
|
|
6941
|
+
"useWhen": "Use ngs-resizable-container around content when the user should manually adjust the width of a single block. Good for resizable preview panes, editor canvas or containers, inspector or detail panels, side content areas, responsive demo areas, chart previews, and docs playgrounds. Use minWidth for the minimum allowed width, resized to persist or synchronize the new width, and TailwindCSS classes for border, height, initial width, layout, and inner content. Do not use as a full split layout between two panels; use Split or a dedicated splitter when available. Do not use for image resizing; use ImageResizer. Do not use for table or DataView column resizing; use the table/DataView resizing feature. Do not use as a normal responsive container when users should not manually resize it; use TailwindCSS responsive utilities or container queries. Do not use for Drawer or Sidebar resizing when those components own their sizing model.",
|
|
6933
6942
|
"exampleTopics": [
|
|
6934
6943
|
"Basic Resizable Container"
|
|
6935
6944
|
],
|
|
@@ -6972,8 +6981,8 @@
|
|
|
6972
6981
|
"sourceRoot": "projects/components/screen-loader/src",
|
|
6973
6982
|
"docsPath": "/components/screen-loader",
|
|
6974
6983
|
"docsOverviewSource": "projects/docs/src/app/components/screen-loader/overview/overview.html",
|
|
6975
|
-
"purpose": "Show a full-screen
|
|
6976
|
-
"useWhen": "Use
|
|
6984
|
+
"purpose": "Show a full-screen blocking loading state for large global operations.",
|
|
6985
|
+
"useWhen": "Use ScreenLoader when the user must wait and should not interact with the app: initial app load, major route or page data loading, account switching, tenant switching, auth or session restore, heavy backend tasks, and large global operations. Prefer ScreenLoaderService.open(messageOrTemplate) for programmatic full-screen overlays, keep the returned ScreenLoaderRef, and always call ref.close() when the operation finishes. Use afterOpened() and afterClosed() only for side effects. Use ngs-screen-loader with opened and message only when the open state is controlled directly in a template. message can be a short string or TemplateRef. Do not use ScreenLoader for local block, card, table, or form loading; use BlockLoader, Skeleton, ProgressSpinner, ProgressBar, or component-specific loading states. Do not use for route navigation progress; use PageLoadingBar. Do not use for known percentage progress; use ProgressBar. Do not leave a service-opened loader without closing its ref.",
|
|
6977
6986
|
"exampleTopics": [
|
|
6978
6987
|
"Basic screen loader"
|
|
6979
6988
|
],
|
|
@@ -7016,8 +7025,8 @@
|
|
|
7016
7025
|
"sourceRoot": "projects/components/scroll-spy/src",
|
|
7017
7026
|
"docsPath": null,
|
|
7018
7027
|
"docsOverviewSource": null,
|
|
7019
|
-
"purpose": "
|
|
7020
|
-
"useWhen": "Use
|
|
7028
|
+
"purpose": "Provide in-page navigation for sections inside a long scrollable page or local scroll container.",
|
|
7029
|
+
"useWhen": "Use ScrollSpy when a long page or panel has stable section ids and needs a table-of-contents style navigation that highlights the active section while scrolling and smooth-scrolls to sections on click. Use ngs-scroll-spy-nav as the nav container, ngs-scroll-spy-on with targetId matching a section id, ngs-scroll-spy-title for the nav heading, and ngs-scroll-spy-back-to-top for a top shortcut. It uses ngs-layout-content or ngs-panel-content as the scroll container when present, otherwise document body. Good for docs pages, long settings pages, profile or detail pages with many sections, policy/help pages, long form review pages, and article-like admin pages. Do not use for primary product navigation; use Navigation, Sidebar, Sidenav, or RailNav. Do not use for tabs between views; use Tabs. Do not use for route breadcrumbs; use Breadcrumbs. Do not use for wizard steps; use Stepper or HeadlessStepper. Do not use on short pages without real scrolling or without stable section ids.",
|
|
7021
7030
|
"exampleTopics": [],
|
|
7022
7031
|
"minimalExample": null,
|
|
7023
7032
|
"exampleFiles": [],
|
|
@@ -7065,8 +7074,8 @@
|
|
|
7065
7074
|
"sourceRoot": "projects/components/scrollbar-area/src",
|
|
7066
7075
|
"docsPath": null,
|
|
7067
7076
|
"docsOverviewSource": null,
|
|
7068
|
-
"purpose": "Provide a styled
|
|
7069
|
-
"useWhen": "Use when a panel,
|
|
7077
|
+
"purpose": "Provide a styled scroll container for bounded UI regions.",
|
|
7078
|
+
"useWhen": "Use ngs-scrollbar-area when a sized panel, grid body, editor sidebar, asset list, menu, or similar surface needs consistent NgStarter scrollbars instead of native browser scrollbars. It hides native scrollbars, renders vertical and horizontal thumbs, supports auto-hide, thumb dragging, resize and mutation tracking, scrollbarWidth, autoHide, absolute fill mode, and scrolled output. Use [absolute]=\"true\" when the scroll area should fill a positioned parent region such as ngs-panel-content or a DataView viewport; make sure the parent already has a stable height and width. Do not use as a generic layout wrapper, spacing helper, page-level replacement for normal browser scrolling, carousel or scroll-snap component, virtualization engine, or a workaround for missing parent sizing.",
|
|
7070
7079
|
"exampleTopics": [],
|
|
7071
7080
|
"minimalExample": null,
|
|
7072
7081
|
"exampleFiles": [],
|
|
@@ -7108,8 +7117,8 @@
|
|
|
7108
7117
|
"sourceRoot": "projects/components/segmented/src",
|
|
7109
7118
|
"docsPath": "/forms/segmented",
|
|
7110
7119
|
"docsOverviewSource": "projects/docs/src/app/forms/segmented/overview/overview.html",
|
|
7111
|
-
"purpose": "
|
|
7112
|
-
"useWhen": "Use for view modes, time ranges,
|
|
7120
|
+
"purpose": "Let users choose one value from a compact set of mutually exclusive modes or options.",
|
|
7121
|
+
"useWhen": "Use ngs-segmented with ngs-segmented-button when a short set of options should stay visible and only one value can be selected. Good for view modes, time ranges, display density, selection mode, chart or table mode, compact filters, and short settings. It works as an Angular form control through value, valueChange, ngModel, or formControlName, supports disabled state, sizes, text buttons, icons with ngsSegmentedIcon, and iconOnly buttons. Do not use Segmented for route or page navigation; use Tabs, Navigation, Sidebar, Sidenav, or RailNav. Do not use for independent on/off toggles; use ButtonToggle or SlideToggle. Do not use for long lists, rich option cards, dropdown choices, or fixed color palettes; use Radio, RadioCard, Select, Autocomplete, or ColorSwitcher.",
|
|
7113
7122
|
"exampleTopics": [
|
|
7114
7123
|
"Basic segmented control",
|
|
7115
7124
|
"Segmented control sizes",
|
|
@@ -7213,8 +7222,8 @@
|
|
|
7213
7222
|
"sourceRoot": "projects/components/select/src",
|
|
7214
7223
|
"docsPath": "/forms/select",
|
|
7215
7224
|
"docsOverviewSource": "projects/docs/src/app/forms/select/overview/overview.html",
|
|
7216
|
-
"purpose": "Let users choose one or
|
|
7217
|
-
"useWhen": "Use for forms and
|
|
7225
|
+
"purpose": "Let users choose one or multiple values from a known dropdown list.",
|
|
7226
|
+
"useWhen": "Use ngs-select inside one ngs-form-field when a form, filter, setting, table filter, DataView filter, or admin configuration field should choose from predefined options. Use ngs-option for options, ngs-optgroup for visible grouping, multiple for array values, placeholder, required, disabled, Angular forms, value, and selectionChange for state. Use ngs-select-trigger to customize the closed label, and ngs-select-header, ngs-select-body, or ngs-select-footer when the dropdown panel needs search, custom scrolling, or supporting controls. Do not use Select as a command menu or action list; use Menu. Do not use for route or page navigation; use Navigation, Tabs, Sidebar, Sidenav, or RailNav. Do not use for compact visible mode switching; use Segmented. Do not use for simple visible choices or rich card choices; use Radio or RadioCard. Do not use for arbitrary free text or large remote search suggestion flows; use Autocomplete or a dedicated async picker. Do not use generic Select when a domain-specific control exists, such as CountrySelect, CurrencySelect, DateFormatSelect, or TimezoneSelect.",
|
|
7218
7227
|
"exampleTopics": [
|
|
7219
7228
|
"Basic Select",
|
|
7220
7229
|
"Getting and setting the select value",
|
|
@@ -7323,8 +7332,8 @@
|
|
|
7323
7332
|
"sourceRoot": "projects/components/side-panel/src",
|
|
7324
7333
|
"docsPath": "/navigation/side-panel",
|
|
7325
7334
|
"docsOverviewSource": "projects/docs/src/app/navigation/side-panel/overview/overview.html",
|
|
7326
|
-
"purpose": "
|
|
7327
|
-
"useWhen": "Use
|
|
7335
|
+
"purpose": "Provide an embedded side utility panel with tabbed tools beside the main content.",
|
|
7336
|
+
"useWhen": "Use ngs-side-panel inside an app or workspace layout when the page needs persistent secondary tools or inspectors next to the primary content. Add ngs-side-panel-tab for each tab with tabId, label, and an optional Iconify icon name or custom icon TemplateRef. Good for info, outline, layers, activity, comments, assets, properties, preview settings, contextual inspectors, and quick tools in editors or admin workspaces. It can be positioned left or right and emits opened and closed. Do not use SidePanel as a temporary overlay; use Drawer. Do not use for modal workflows or confirmations; use Dialog or Confirm. Do not use as a generic page section; use Panel or Card. Do not use for primary app navigation; use Sidebar, Sidenav, Navigation, or RailNav. Do not use for tabs inside normal content; use Tabs. Do not use for simple action lists; use Menu.",
|
|
7328
7337
|
"exampleTopics": [
|
|
7329
7338
|
"Basic side panel"
|
|
7330
7339
|
],
|
|
@@ -7381,25 +7390,25 @@
|
|
|
7381
7390
|
"sourceRoot": "projects/components/sidebar/src",
|
|
7382
7391
|
"docsPath": "/navigation/sidebar",
|
|
7383
7392
|
"docsOverviewSource": "projects/docs/src/app/navigation/sidebar/overview/overview.html",
|
|
7384
|
-
"purpose": "Provide vertical app
|
|
7385
|
-
"useWhen": "Use
|
|
7393
|
+
"purpose": "Provide a complete vertical app or workspace sidebar with its own navigation system.",
|
|
7394
|
+
"useWhen": "Use ngs-sidebar as the content inside a shell sidebar region, usually inside Sidenav or LayoutSidebar, when an admin app or workspace needs persistent sidebar navigation and supporting sidebar content. Compose it with ngs-sidebar-header, ngs-sidebar-body, ngs-sidebar-footer, ngs-sidebar-nav, ngs-sidebar-nav-item, ngs-sidebar-nav-group, ngs-sidebar-nav-group-toggle, ngs-sidebar-nav-group-menu, ngs-sidebar-nav-heading, ngs-sidebar-divider, ngsSidebarNavItemIcon, ngsSidebarNavItemBadge, and ngsSidebarNavGroupToggleIcon. Good for brand or workspace header, main app navigation, grouped routes, badges, active item state through activeKey, autoScrollToActiveItem, and data-driven nav templates. Sidebar owns navigation; when ngs-sidebar is not used and persistent navigation is needed, use Navigation. Do not use Sidebar as a generic left column, card, drawer content, inspector, page section, tabs, menu, or compact icon rail. Use Sidenav for responsive open, collapse, or overlay shell behavior, RailNav for compact icon navigation, SidePanel for secondary tabbed tools, Drawer for temporary overlay side content, and Panel or Card for content grouping.",
|
|
7386
7395
|
"exampleTopics": [
|
|
7387
7396
|
"Basic sidebar",
|
|
7388
7397
|
"Sidebar with custom icons"
|
|
7389
7398
|
],
|
|
7390
|
-
"minimalExample": "<div class=\"h-[600px] w-[300px] relative\">\n <ngs-sidebar class=\"border border-muted rounded-2xl\">\n <ngs-sidebar-header class=\"flex h-14 items-center px-4 font-bold text-primary border-b border-b-muted\">\n NGSTARTER\n </ngs-sidebar-header>\n <ngs-sidebar-body>\n <ngs-sidebar-nav activeKey=\"home\" class=\"p-4\">\n @for (navItem of navItems; track navItem) {\n @switch (navItem.type) {\n @case ('group') {\n <ngs-sidebar-nav-group>\n <ngs-sidebar-nav-group-toggle>\n <ng-container ngsSidebarNavItemIcon>\n @if (navItem.icon) {\n <ngs-icon name=\"fluent:{{ navItem.icon }}\"/>\n }\n </ng-container>\n {{ navItem.label }}\n <ngs-icon name=\"fluent:chevron-down-24-regular\" ngsSidebarNavGroupToggleIcon/>\n </ngs-sidebar-nav-group-toggle>\n <ngs-sidebar-nav-group-menu>\n @for (childNavItem of navItem.children; track childNavItem) {\n <ngs-sidebar-nav-item [key]=\"childNavItem.key\">\n <ng-container ngsSidebarNavItemIcon>\n @if (childNavItem.icon) {\n <ngs-icon name=\"fluent:{{
|
|
7399
|
+
"minimalExample": "<div class=\"h-[600px] w-[300px] relative\">\n <ngs-sidebar class=\"border border-muted rounded-2xl\">\n <ngs-sidebar-header class=\"flex h-14 items-center px-4 font-bold text-primary border-b border-b-muted\">\n NGSTARTER\n </ngs-sidebar-header>\n <ngs-sidebar-body>\n <ngs-sidebar-nav activeKey=\"home\" class=\"p-4\">\n @for (navItem of navItems; track navItem) {\n @switch (navItem.type) {\n @case ('group') {\n <ngs-sidebar-nav-group>\n <ngs-sidebar-nav-group-toggle>\n <ng-container ngsSidebarNavItemIcon>\n @if (navItem.icon) {\n <ngs-icon name=\"fluent:{{ navItem.icon }}\"/>\n }\n </ng-container>\n {{ navItem.label }}\n <ngs-icon name=\"fluent:chevron-down-24-regular\" ngsSidebarNavGroupToggleIcon/>\n </ngs-sidebar-nav-group-toggle>\n <ngs-sidebar-nav-group-menu>\n @for (childNavItem of navItem.children; track childNavItem) {\n <ngs-sidebar-nav-item [key]=\"childNavItem.key\">\n <ng-container ngsSidebarNavItemIcon>\n @if (childNavItem.icon) {\n <ngs-icon name=\"fluent:{{ childNavItem.icon }}\"/>\n }\n </ng-container>\n {{ childNavItem.label }}\n </ngs-sidebar-nav-item>\n }\n </ngs-sidebar-nav-group-menu>\n </ngs-sidebar-nav-group>\n }\n @case (\n...",
|
|
7391
7400
|
"exampleFiles": [
|
|
7392
7401
|
{
|
|
7393
7402
|
"name": "basic-sidebar-example",
|
|
7394
7403
|
"title": "Basic sidebar",
|
|
7395
7404
|
"file": "projects/docs/src/app/navigation/sidebar/_examples/basic-sidebar-example/basic-sidebar-example.html",
|
|
7396
|
-
"source": "<div class=\"h-[600px] w-[300px] relative\">\n <ngs-sidebar class=\"border border-muted rounded-2xl\">\n <ngs-sidebar-header class=\"flex h-14 items-center px-4 font-bold text-primary border-b border-b-muted\">\n NGSTARTER\n </ngs-sidebar-header>\n <ngs-sidebar-body>\n <ngs-sidebar-nav activeKey=\"home\" class=\"p-4\">\n @for (navItem of navItems; track navItem) {\n @switch (navItem.type) {\n @case ('group') {\n <ngs-sidebar-nav-group>\n <ngs-sidebar-nav-group-toggle>\n <ng-container ngsSidebarNavItemIcon>\n @if (navItem.icon) {\n <ngs-icon name=\"fluent:{{ navItem.icon }}\"/>\n }\n </ng-container>\n {{ navItem.label }}\n <ngs-icon name=\"fluent:chevron-down-24-regular\" ngsSidebarNavGroupToggleIcon/>\n </ngs-sidebar-nav-group-toggle>\n <ngs-sidebar-nav-group-menu>\n @for (childNavItem of navItem.children; track childNavItem) {\n <ngs-sidebar-nav-item [key]=\"childNavItem.key\">\n <ng-container ngsSidebarNavItemIcon>\n @if (childNavItem.icon) {\n <ngs-icon name=\"fluent:{{
|
|
7405
|
+
"source": "<div class=\"h-[600px] w-[300px] relative\">\n <ngs-sidebar class=\"border border-muted rounded-2xl\">\n <ngs-sidebar-header class=\"flex h-14 items-center px-4 font-bold text-primary border-b border-b-muted\">\n NGSTARTER\n </ngs-sidebar-header>\n <ngs-sidebar-body>\n <ngs-sidebar-nav activeKey=\"home\" class=\"p-4\">\n @for (navItem of navItems; track navItem) {\n @switch (navItem.type) {\n @case ('group') {\n <ngs-sidebar-nav-group>\n <ngs-sidebar-nav-group-toggle>\n <ng-container ngsSidebarNavItemIcon>\n @if (navItem.icon) {\n <ngs-icon name=\"fluent:{{ navItem.icon }}\"/>\n }\n </ng-container>\n {{ navItem.label }}\n <ngs-icon name=\"fluent:chevron-down-24-regular\" ngsSidebarNavGroupToggleIcon/>\n </ngs-sidebar-nav-group-toggle>\n <ngs-sidebar-nav-group-menu>\n @for (childNavItem of navItem.children; track childNavItem) {\n <ngs-sidebar-nav-item [key]=\"childNavItem.key\">\n <ng-container ngsSidebarNavItemIcon>\n @if (childNavItem.icon) {\n <ngs-icon name=\"fluent:{{ childNavItem.icon }}\"/>\n }\n </ng-container>\n {{ childNavItem.label }}\n </ngs-sidebar-nav-item>\n }\n </ngs-sidebar-nav-group-menu>\n </ngs-sidebar-nav-group>\n }\n @case (\n..."
|
|
7397
7406
|
},
|
|
7398
7407
|
{
|
|
7399
7408
|
"name": "sidebar-with-custom-icons-example",
|
|
7400
7409
|
"title": "Sidebar with custom icons",
|
|
7401
7410
|
"file": "projects/docs/src/app/navigation/sidebar/_examples/sidebar-with-custom-icons-example/sidebar-with-custom-icons-example.html",
|
|
7402
|
-
"source": "<div class=\"h-[600px] w-[300px] relative\">\n <ngs-sidebar class=\"border border-muted rounded-2xl\">\n <ngs-sidebar-header class=\"flex h-14 items-center px-4 font-bold border-b border-b-muted text-primary\">\n NgStarter\n </ngs-sidebar-header>\n <ngs-sidebar-body>\n <ngs-sidebar-nav activeKey=\"home\" class=\"p-4\">\n @for (navItem of navItems; track navItem) {\n @switch (navItem.type) {\n @case ('group') {\n <ngs-sidebar-nav-group>\n <ngs-sidebar-nav-group-toggle>\n <ng-container ngsSidebarNavItemIcon>\n @if (navItem.icon) {\n <ngs-icon [name]=\"navItem.icon\"/>\n }\n </ng-container>\n {{ navItem.label }}\n <ngs-icon ngsSidebarNavGroupToggleIcon name=\"fluent:add-24-regular\"/>\n </ngs-sidebar-nav-group-toggle>\n <ngs-sidebar-nav-group-menu>\n @for (childNavItem of navItem.children; track childNavItem) {\n <ngs-sidebar-nav-item [key]=\"childNavItem.key\">\n <ng-container ngsSidebarNavItemIcon>\n @if (childNavItem.icon) {\n <ngs-icon [name]=\"
|
|
7411
|
+
"source": "<div class=\"h-[600px] w-[300px] relative\">\n <ngs-sidebar class=\"border border-muted rounded-2xl\">\n <ngs-sidebar-header class=\"flex h-14 items-center px-4 font-bold border-b border-b-muted text-primary\">\n NgStarter\n </ngs-sidebar-header>\n <ngs-sidebar-body>\n <ngs-sidebar-nav activeKey=\"home\" class=\"p-4\">\n @for (navItem of navItems; track navItem) {\n @switch (navItem.type) {\n @case ('group') {\n <ngs-sidebar-nav-group>\n <ngs-sidebar-nav-group-toggle>\n <ng-container ngsSidebarNavItemIcon>\n @if (navItem.icon) {\n <ngs-icon [name]=\"navItem.icon\"/>\n }\n </ng-container>\n {{ navItem.label }}\n <ngs-icon ngsSidebarNavGroupToggleIcon name=\"fluent:add-24-regular\"/>\n </ngs-sidebar-nav-group-toggle>\n <ngs-sidebar-nav-group-menu>\n @for (childNavItem of navItem.children; track childNavItem) {\n <ngs-sidebar-nav-item [key]=\"childNavItem.key\">\n <ng-container ngsSidebarNavItemIcon>\n @if (childNavItem.icon) {\n <ngs-icon [name]=\"childNavItem.icon\"/>\n }\n </ng-container>\n {{ childNavItem.label }}\n </ngs-sidebar-nav-item>\n }\n </ngs-sidebar-nav-group-menu>\n </ngs-sidebar-nav-group>\n }\n @case ('heading') {\n <ngs\n..."
|
|
7403
7412
|
}
|
|
7404
7413
|
],
|
|
7405
7414
|
"previewAsset": "projects/components/sidebar/preview.svg",
|
|
@@ -7594,8 +7603,8 @@
|
|
|
7594
7603
|
"sourceRoot": "projects/components/sidenav/src",
|
|
7595
7604
|
"docsPath": "/components/sidenav",
|
|
7596
7605
|
"docsOverviewSource": "projects/docs/src/app/components/sidenav/overview/overview.html",
|
|
7597
|
-
"purpose": "Provide side
|
|
7598
|
-
"useWhen": "Use
|
|
7606
|
+
"purpose": "Provide a responsive shell container for side surfaces that can open, close, collapse, overlay, or push content.",
|
|
7607
|
+
"useWhen": "Use ngs-sidenav-container with ngs-sidenav and ngs-sidenav-content when a page or app shell needs a side region with behavior: opened state, open/close/toggle methods, mode over/push/side, position start/end, collapsed icon-width state, disableClose, backdrop and backdropClick, adaptive mobile mode through adaptive and adaptiveBreakpoint, fixedWidth, autosize, and autoFocus. Use ngsSidenavCollapsed and ngsSidenavExpanded templates to render different content while collapsed or expanded. In admin shells, put ngs-sidebar inside ngs-sidenav when the side region is primary navigation; Sidebar owns the actual navigation items. Do not use Sidenav as the navigation structure itself; use Sidebar or Navigation inside it. Do not use for temporary task panels; use Drawer. Do not use for persistent tabbed utility tools; use SidePanel. Do not use for static local columns or content sections; use LayoutSidebar, Panel, or Tailwind layout. Do not use for modal workflows, confirmations, or action menus; use Dialog, Confirm, or Menu.",
|
|
7599
7608
|
"exampleTopics": [
|
|
7600
7609
|
"Basic sidenav"
|
|
7601
7610
|
],
|
|
@@ -7668,8 +7677,8 @@
|
|
|
7668
7677
|
"sourceRoot": "projects/components/signature-pad/src",
|
|
7669
7678
|
"docsPath": "/components/signature-pad",
|
|
7670
7679
|
"docsOverviewSource": "projects/docs/src/app/components/signature-pad/overview/overview.html",
|
|
7671
|
-
"purpose": "Capture a
|
|
7672
|
-
"useWhen": "Use
|
|
7680
|
+
"purpose": "Capture a handwritten signature and emit it as a PNG data URL.",
|
|
7681
|
+
"useWhen": "Use ngs-signature-pad in approval, contract, consent, delivery confirmation, onboarding, checkout, legal acknowledgement, or internal workflow forms where the user must draw a signature. It supports mouse, touch, or pen input, penColor, colors for the fixed allowed pen palette, lineWidth, backgroundColor, lazy brush smoothing through lazyRadius/lazyFriction/lazyEnabled, clear(), save(), signatureSaved with a base64 PNG data URL, and signatureCleared. Use the emitted PNG in app code to store or attach the signature to the workflow or document. Do not use SignaturePad as a general drawing canvas, image editor, annotation tool, sketch board, whiteboard, file upload, typed-name field, or legal validation system by itself. App code still needs to require the signature when needed, persist it, and enforce backend or legal rules.",
|
|
7673
7682
|
"exampleTopics": [
|
|
7674
7683
|
"Basic signature pad"
|
|
7675
7684
|
],
|
|
@@ -7726,8 +7735,8 @@
|
|
|
7726
7735
|
"sourceRoot": "projects/components/skeleton/src",
|
|
7727
7736
|
"docsPath": "/components/skeleton",
|
|
7728
7737
|
"docsOverviewSource": "projects/docs/src/app/components/skeleton/overview/overview.html",
|
|
7729
|
-
"purpose": "Show placeholder
|
|
7730
|
-
"useWhen": "Use
|
|
7738
|
+
"purpose": "Show placeholder blocks for loading content when the final layout is already known.",
|
|
7739
|
+
"useWhen": "Use ngs-skeleton to preserve layout while cards, lists, table rows, dashboard widgets, chart areas, avatars, text lines, or media blocks are loading. Shape and size each skeleton with TailwindCSS utilities such as h-*, w-*, size-*, flex, grid, gap, and wrapper layouts so it roughly matches the UI that will replace it. Use roundedFull for circular placeholders such as avatars or icon circles. Do not use Skeleton for unknown long operations where progress matters; use ProgressBar. Do not use for global route or app loading; use PageLoadingBar or ScreenLoader. Do not use for blocking a local section; use BlockLoader. Do not use for empty results; use EmptyState. Do not use for image fallback after load failure; use ImagePlaceholder. Do not use random grey blocks that do not resemble the final content.",
|
|
7731
7740
|
"exampleTopics": [
|
|
7732
7741
|
"Basic Skeleton"
|
|
7733
7742
|
],
|
|
@@ -7774,8 +7783,8 @@
|
|
|
7774
7783
|
"sourceRoot": "projects/components/slide-toggle/src",
|
|
7775
7784
|
"docsPath": "/forms/slide-toggle",
|
|
7776
7785
|
"docsOverviewSource": "projects/docs/src/app/forms/slide-toggle/overview/overview.html",
|
|
7777
|
-
"purpose": "Capture a
|
|
7778
|
-
"useWhen": "Use for preferences
|
|
7786
|
+
"purpose": "Capture a boolean on/off setting where checked means enabled.",
|
|
7787
|
+
"useWhen": "Use ngs-slide-toggle for settings and preferences where checked=true means the feature or state is enabled. Good for live updates, notifications, dark mode option, visibility, sidebar expanded or collapsed, animation on/off, table options, enable Wi-Fi, show archived, and allow comments. It is an Angular form control with checked, disabled, required, ngModel, formControlName, change, and toggleChange, and has its own label pattern, so do not wrap it in ngs-form-field. Do not use SlideToggle for choosing one value from many; use Radio, Segmented, or Select. Do not use for multiple independent selections in a list; use Checkbox. Do not use for button-like mode groups; use ButtonToggle. Do not use for actions, commands, navigation, or rich option cards; use Button, Navigation, or RadioCard. For “I agree” or “accept terms” confirmations, prefer Checkbox because the user is confirming, not enabling a setting.",
|
|
7779
7788
|
"exampleTopics": [
|
|
7780
7789
|
"Basic Slide Toggle",
|
|
7781
7790
|
"Disabled Slide Toggle",
|
|
@@ -7857,8 +7866,8 @@
|
|
|
7857
7866
|
"sourceRoot": "projects/components/slider/src",
|
|
7858
7867
|
"docsPath": "/components/slider",
|
|
7859
7868
|
"docsOverviewSource": "projects/docs/src/app/components/slider/overview/overview.html",
|
|
7860
|
-
"purpose": "Let users choose
|
|
7861
|
-
"useWhen": "Use for volume, size,
|
|
7869
|
+
"purpose": "Let users choose one numeric value or a start/end range by dragging thumb controls.",
|
|
7870
|
+
"useWhen": "Use ngs-slider when approximate visual numeric adjustment is better than typing. Good for volume, opacity, zoom, size, threshold, percentage, rating or score, price range, numeric date or age range, chart settings, visual tuning, and filter ranges. Use input ngsSliderThumb for one value, or input ngsSliderStartThumb plus input ngsSliderEndThumb for a range. Configure min, max, step, disabled, discrete, showTickMarks, displayWith, Angular forms, and valueChange on thumbs. Do not use Slider to show progress or status; use ProgressBar or Gauge. Do not use when exact numeric entry is primary; use NumberInput or pair NumberInput with Slider. Do not use for named categories; use Select, Radio, or Segmented. Do not use for before/after image comparison; use ComparisonSlider. Do not use for pagination or table sorting/filter builder logic; use Paginator, Sort, or FilterBuilder.",
|
|
7862
7871
|
"exampleTopics": [
|
|
7863
7872
|
"Basic Slider",
|
|
7864
7873
|
"Custom Thumb Label Formatting",
|
|
@@ -7944,8 +7953,8 @@
|
|
|
7944
7953
|
"sourceRoot": "projects/components/snack-bar/src",
|
|
7945
7954
|
"docsPath": "/components/snackbar",
|
|
7946
7955
|
"docsOverviewSource": "projects/docs/src/app/components/snackbar/overview/overview.html",
|
|
7947
|
-
"purpose": "Show short transient feedback after an action.",
|
|
7948
|
-
"useWhen": "Use for
|
|
7956
|
+
"purpose": "Show short transient overlay feedback after an action or background result.",
|
|
7957
|
+
"useWhen": "Use the SnackBar service for brief non-blocking messages such as Saved, Copied, Invite sent, Refresh complete, Export started, or Deleted, with an optional quick action such as Undo or View. Open with snackBar.open(message, action?, config?), openFromComponent, or openFromTemplate. Configure duration, horizontalPosition, verticalPosition, data, panelClass, custom component or template content, and use SnackBarRef.dismiss(), afterOpened(), and afterDismissed() for lifecycle handling. SnackBar should be short, temporary, and safe to miss. Do not use for field validation errors; use FormField errors. Do not use for persistent inline messages; use Alert. Do not use for global important header messages; use Announcement. Do not use for critical required actions; use ActionRequired. Do not use for confirmations before destructive actions; use Confirm. Do not use for modal workflows; use Dialog. Do not use for long-lived notification inboxes or event feeds; use Notifications. Do not use for incident/status banners or loading/progress states; use Incidents, ProgressBar, ScreenLoader, BlockLoader, or PageLoadingBar.",
|
|
7949
7958
|
"exampleTopics": [
|
|
7950
7959
|
"Basic Snackbar",
|
|
7951
7960
|
"Snackbar With Custom Component",
|
|
@@ -8012,8 +8021,8 @@
|
|
|
8012
8021
|
"sourceRoot": "projects/components/sort/src",
|
|
8013
8022
|
"docsPath": null,
|
|
8014
8023
|
"docsOverviewSource": null,
|
|
8015
|
-
"purpose": "Provide
|
|
8016
|
-
"useWhen": "Use with
|
|
8024
|
+
"purpose": "Provide sortable header behavior and sort state for table-like data.",
|
|
8025
|
+
"useWhen": "Use ngsSort on a sortable table/list/data container and ngs-sort-header=\"fieldName\" on header cells that should cycle through sort states. Sort tracks active column and direction (asc, desc, or cleared), supports ngsSortActive, ngsSortDirection, ngsSortStart, ngsSortDisableClear, ngsSortDisabled, per-header disabled state, sortActionDescription, and emits ngsSortChange with { active, direction }. Use it with Table sortable column headers, custom table-like data surfaces, and when wiring sort state into a local TableDataSource or server/API query. For DataView, usually prefer its built-in sortable column config and sortChange instead of manually adding ngs-sort-header. Do not use Sort as a visual sort icon only, filter builder, search, grouping, drag reorder, tab sorting, or generic “sort these cards” button. Sort only manages header state and emits the selected sort; the app/data source still applies local sorting or sends the sort state to the backend.",
|
|
8017
8026
|
"exampleTopics": [],
|
|
8018
8027
|
"minimalExample": null,
|
|
8019
8028
|
"exampleFiles": [],
|
|
@@ -8058,8 +8067,8 @@
|
|
|
8058
8067
|
"sourceRoot": "projects/components/spinner/src",
|
|
8059
8068
|
"docsPath": "/components/progress-spinner",
|
|
8060
8069
|
"docsOverviewSource": "projects/docs/src/app/components/progress-spinner/overview/overview.html",
|
|
8061
|
-
"purpose": "
|
|
8062
|
-
"useWhen": "
|
|
8070
|
+
"purpose": "Show a circular indicator for an ongoing operation.",
|
|
8071
|
+
"useWhen": "Use ngs-progress-spinner when a compact circular loading indicator is needed inside a button, overlay, media viewer, widget, small page area, or next to an action. Use mode=\"indeterminate\" when the remaining time or amount of work is unknown. Use mode=\"determinate\" with value from 0 to 100 when progress is known. Configure diameter, strokeWidth, and color for the surface. Do not use ProgressSpinner for linear progress; use ProgressBar. Do not use it for known loading layouts; use Skeleton. Do not use it for router or page transition loading; use PageLoadingBar. Do not use it as a full-screen or blocking state by itself; use ScreenLoader or BlockLoader. Do not use it as a KPI or metric display; use Gauge or ProgressBar based on context.",
|
|
8063
8072
|
"exampleTopics": [
|
|
8064
8073
|
"Basic Progress Spinner",
|
|
8065
8074
|
"Configurable Progress Spinner",
|
|
@@ -8118,8 +8127,8 @@
|
|
|
8118
8127
|
"sourceRoot": "projects/components/splash-screen/src",
|
|
8119
8128
|
"docsPath": null,
|
|
8120
8129
|
"docsOverviewSource": null,
|
|
8121
|
-
"purpose": "Show
|
|
8122
|
-
"useWhen": "Use
|
|
8130
|
+
"purpose": "Show one full-screen branded startup overlay during the initial app bootstrap moment.",
|
|
8131
|
+
"useWhen": "Use ngs-splash-screen once near the root app template while Angular, routing, theme, auth/session, tenant, or essential startup data initializes. Project ngs-logo or custom branded content into it. It hides automatically after the first NavigationEnd with hideDelay, fades with animationDuration, and can be controlled through SplashScreenStore.show() and SplashScreenStore.hide(). Do not use SplashScreen for normal page loading after startup; use PageLoadingBar. Do not use for full-screen blocking operations after the app is running; use ScreenLoader. Do not use for local card, table, form, or widget loading; use BlockLoader, Skeleton, ProgressBar, or component-specific loading states. Do not use for empty states, route skeletons, modal workflows, or marketing hero screens. SplashScreen should be one per app and short-lived at the beginning, not shown for every action.",
|
|
8123
8132
|
"exampleTopics": [],
|
|
8124
8133
|
"minimalExample": null,
|
|
8125
8134
|
"exampleFiles": [],
|
|
@@ -8155,8 +8164,8 @@
|
|
|
8155
8164
|
"sourceRoot": "projects/components/split/src",
|
|
8156
8165
|
"docsPath": "/components/split-pane",
|
|
8157
8166
|
"docsOverviewSource": "projects/docs/src/app/components/split-pane/overview/overview.html",
|
|
8158
|
-
"purpose": "
|
|
8159
|
-
"useWhen": "Use for editors, master-detail
|
|
8167
|
+
"purpose": "Create a resizable multi-pane layout with draggable gutters between panes.",
|
|
8168
|
+
"useWhen": "Use ngs-split with multiple ngs-split-pane regions when a workspace needs two or more panes that users can manually resize. Good for editors, IDE-like screens, analytics workspaces, master-detail-detail layouts, source and preview views, inspector plus canvas plus logs, and dense multi-pane tools. Supports horizontal or vertical direction, nested splits, unit percent or pixel, size, minSize, maxSize, lockSize, visible, order, withHandle dotted gutter affordance, restrictMove, disabled, gutterSize, gutterStep, dragStart, dragEnd, gutterClick, gutterDblClick, transitionEnd, getVisibleAreaSizes(), and setVisibleAreaSizes() for persistence. Do not use Split for ordinary responsive layout or static two-column admin pages; use TailwindCSS grid or flex. Do not use for one manually resized box; use ResizableContainer. Do not use for side navigation shells; use Sidenav or Sidebar. Do not use for temporary side overlays; use Drawer. Do not use for local structured page sections; use Panel. Do not use for table column resizing or image resizing; use table features or ImageResizer. The parent must have a stable height and width.",
|
|
8160
8169
|
"exampleTopics": [
|
|
8161
8170
|
"Basic Split Pane",
|
|
8162
8171
|
"Split Pane with Handle",
|
|
@@ -8270,8 +8279,8 @@
|
|
|
8270
8279
|
"sourceRoot": "projects/components/stepper/src",
|
|
8271
8280
|
"docsPath": "/components/stepper",
|
|
8272
8281
|
"docsOverviewSource": "projects/docs/src/app/components/stepper/overview/overview.html",
|
|
8273
|
-
"purpose": "
|
|
8274
|
-
"useWhen": "Use for onboarding, setup,
|
|
8282
|
+
"purpose": "Render a ready-made visual wizard for several connected steps in one process.",
|
|
8283
|
+
"useWhen": "Use ngs-stepper with ngs-step when users must move through related steps and see their current progress. Good for onboarding, checkout, setup, import/export flows, account or tenant creation, review flows, and multi-step forms. Use linear mode with stepControl when each step must be valid before the user continues. Use ngsStepperNext and ngsStepperPrevious on NgStarter buttons for standard wizard navigation, ngsStepLabel or label for step labels, optional/completed/error states for step status, and horizontal or vertical orientation for responsive layouts. Do not use Stepper when you only need step state and validation logic without the default visual UI; use HeadlessStepper. Do not use for independent page sections; use Tabs or ExpansionPanel. Do not use for app route navigation; use Navigation, Breadcrumbs, Sidebar, or routing. Do not use for showing only a percentage; use ProgressBar. Do not use for product tours over existing UI; use GuidedTour.",
|
|
8275
8284
|
"exampleTopics": [
|
|
8276
8285
|
"Basic Stepper",
|
|
8277
8286
|
"Stepper Vertical",
|
|
@@ -8355,8 +8364,8 @@
|
|
|
8355
8364
|
"sourceRoot": "projects/components/suggestions/src",
|
|
8356
8365
|
"docsPath": "/components/suggestions",
|
|
8357
8366
|
"docsOverviewSource": "projects/docs/src/app/components/suggestions/overview/overview.html",
|
|
8358
|
-
"purpose": "
|
|
8359
|
-
"useWhen": "Use
|
|
8367
|
+
"purpose": "Render a grouped visual list of contextual suggestions, search results, recent items, or shortcuts.",
|
|
8368
|
+
"useWhen": "Use ngs-suggestions as the visual list inside search dropdowns, assistant inputs, command-like panels, or contextual suggestion popovers. Group related rows with ngs-suggestion-block, use ngs-suggestion for each clickable row, place icons with ngsSuggestionIcon, thumbnails or avatars with ngsSuggestionThumb, and use inline blocks for quick actions such as create buttons. Good for recently viewed items, users, files, pages, matching search results, and quick create shortcuts. Do not use Suggestions as a form value picker; use Autocomplete or Select. Do not use it for a short contextual command menu; use Menu. Do not use it for persistent app navigation; use Navigation, Sidebar, Sidenav, or RailNav. Do not use it as a complete command palette by itself; it can provide the grouped visual result list, but search state, keyboard handling, filtering, and command execution belong to the surrounding feature. Do not use it for page-level empty-state recommendations or assistant cards; compose those with EmptyState, Card, Alert, or the page layout.",
|
|
8360
8369
|
"exampleTopics": [
|
|
8361
8370
|
"Basic suggestions"
|
|
8362
8371
|
],
|
|
@@ -8423,8 +8432,8 @@
|
|
|
8423
8432
|
"sourceRoot": "projects/components/tab-panel/src",
|
|
8424
8433
|
"docsPath": "/navigation/tab-panel",
|
|
8425
8434
|
"docsOverviewSource": "projects/docs/src/app/navigation/tab-panel/overview/overview.html",
|
|
8426
|
-
"purpose": "
|
|
8427
|
-
"useWhen": "Use for
|
|
8435
|
+
"purpose": "Create a compact vertical tool or navigation panel with a linked aside content area.",
|
|
8436
|
+
"useWhen": "Use ngs-tab-panel when a workspace or editor needs a vertical set of icon/text items that controls adjacent aside content. Use ngs-tab-panel-content with ngs-tab-panel-nav and ngs-tab-panel-item for the rail, bind items to content with matching for values and ngsTabPanelAsideContent ids inside ngs-tab-panel-aside, and use activeItemId to choose the active item. Good for image editors, design tools, asset panels, layers, inspectors, workspace switchers, tool palettes, and settings/tools inside dense work surfaces. Use compact for icon-only rails with tooltips, header/content/footer regions to group items, and ngs-tab-panel-custom-item for custom items such as avatars, workspaces, or add actions. Do not use TabPanel for ordinary horizontal page tabs; use Tabs. Do not use it for primary app navigation; use Sidebar, Navigation, Sidenav, or RailNav. Do not use it for temporary overlay side content; use Drawer. Do not use it for a structured page section; use Panel. Do not use it for workflow steps; use Stepper. Do not use it for contextual command lists; use Menu.",
|
|
8428
8437
|
"exampleTopics": [
|
|
8429
8438
|
"Basic tab panel",
|
|
8430
8439
|
"Tab panel with panel inside",
|
|
@@ -8534,8 +8543,8 @@
|
|
|
8534
8543
|
"sourceRoot": "projects/components/table/src",
|
|
8535
8544
|
"docsPath": "/components/table",
|
|
8536
8545
|
"docsOverviewSource": "projects/docs/src/app/components/table/overview/overview.html",
|
|
8537
|
-
"purpose": "Render
|
|
8538
|
-
"useWhen": "Use for
|
|
8546
|
+
"purpose": "Render static or simple template-defined tabular data with known columns.",
|
|
8547
|
+
"useWhen": "Use table[ngs-table] or ngs-table for static or simple tabular data where columns are known in Angular templates: read-only tables, documentation tables, settings summaries, static comparison rows, lightweight report tables, and small non-interactive admin tables. Define columns with ngsColumnDef, header/body/footer cells with ngsHeaderCellDef, ngsCellDef, and ngsFooterCellDef, and rows with ngsHeaderRowDef, ngsRowDef, and ngsFooterRowDef. Use TableDataSource only for lightweight local table behavior, not as a replacement for a real datatable. Use sticky/stickyEnd for fixed columns and sticky row defs for sticky header or footer. Use table[ngs-native-table] only for static HTML tables without a data source. Do not build tables with div role=\"table\" or custom grid markup when ngs-table fits. Use DataView instead when the UI is a datatable or working data surface with row actions, selection, sorting, search/filter state, pagination, column sizing/settings, saved views, server-driven data, or complex record management. Use List for simple vertical rows without real columns. Use Tree for hierarchical rows. Use Grid or Tiles for dashboard layouts. Use Sort only for sort state behavior; it does not replace Table.",
|
|
8539
8548
|
"exampleTopics": [
|
|
8540
8549
|
"Native Table",
|
|
8541
8550
|
"Basic Table",
|
|
@@ -8670,8 +8679,8 @@
|
|
|
8670
8679
|
"sourceRoot": "projects/components/tabs/src",
|
|
8671
8680
|
"docsPath": "/components/tabs",
|
|
8672
8681
|
"docsOverviewSource": "projects/docs/src/app/components/tabs/overview/overview.html",
|
|
8673
|
-
"purpose": "Switch between
|
|
8674
|
-
"useWhen": "Use for
|
|
8682
|
+
"purpose": "Switch between peer views inside one page or section context, with only one panel visible at a time.",
|
|
8683
|
+
"useWhen": "Use ngs-tab-group with ngs-tab for local content tabs that do not require routing. Use ngs-tab-nav-bar with a[ngs-tab-link] and ngs-tab-nav-panel for route-linked tabs inside one section, such as documentation overview/API pages or detail subsections. Good for entity details, settings subsections, overview/activity/files/settings pages, alternate views of one object, or peer panels that share the same context. Supports selectedIndex, selectedIndexChange, selectedTabChange, disabled tabs, custom ngsTabLabel templates, explicit ngsTabContent templates, preserveContent, stretchTabs, alignTabs, headerPosition above/below, overflow pagination controls, and animationDuration/custom animations. Do not use Tabs for compact mode or value switches; use Segmented. Do not use for wizard or process steps; use Stepper. Do not use for vertical tool panels with linked aside content; use TabPanel. Do not use for primary app navigation; use Navigation, Sidebar, Sidenav, or RailNav. Do not use for collapsible sections; use ExpansionPanel. Do not use for route paths; use Breadcrumbs. Do not use for choosing a form value; use Select, Radio, RadioCard, Checkbox, or ButtonToggle depending on the interaction.",
|
|
8675
8684
|
"exampleTopics": [
|
|
8676
8685
|
"Basic Tabs",
|
|
8677
8686
|
"Tabs with aligned labels",
|
|
@@ -8785,8 +8794,8 @@
|
|
|
8785
8794
|
"sourceRoot": "projects/components/text-editor/src",
|
|
8786
8795
|
"docsPath": "/components/text-editor",
|
|
8787
8796
|
"docsOverviewSource": "projects/docs/src/app/components/text-editor/overview/overview.html",
|
|
8788
|
-
"purpose": "Provide a rich text
|
|
8789
|
-
"useWhen": "Use for
|
|
8797
|
+
"purpose": "Provide a full Tiptap-based WYSIWYG rich text editor for formatted HTML content.",
|
|
8798
|
+
"useWhen": "Use ngs-text-editor when users need to create or edit rich HTML content with headings, bold, italic, strike, lists, blockquotes, inline code, code blocks, horizontal rules, links, images, YouTube embeds, toolbar commands, bubble menus, or floating menus. Good for product descriptions, project/task descriptions, CMS-like fields, articles, notes, changelog entries, release notes, knowledge base content, help content, and rich admin content bodies. Provide initial HTML through content, listen to contentChange for updated HTML, add custom Tiptap extensions through extensions, and use imageUploadFn to upload images and resolve a URL. Compose controls with ngs-text-editor-toolbar, ngs-text-editor-bubble-menu, ngs-text-editor-floating-menu, ngs-text-editor-divider, and ngsTextEditorCommand* directives. Do not use TextEditor for short comments, threads, or quick replies; use CommentEditor. Do not use it for block-based CMS/page building; use ContentEditor. Do not use it for plain text fields; use ngsInput inside FormField. Do not use it for inline renaming; use InlineTextEdit. Do not use it for read-only code or snippets; use CodeHighlighter.",
|
|
8790
8799
|
"exampleTopics": [
|
|
8791
8800
|
"Basic Text Editor",
|
|
8792
8801
|
"Text Editor with floating menu",
|
|
@@ -8925,8 +8934,8 @@
|
|
|
8925
8934
|
"sourceRoot": "projects/components/thumbnail-maker/src",
|
|
8926
8935
|
"docsPath": "/components/thumbnail-maker",
|
|
8927
8936
|
"docsOverviewSource": "projects/docs/src/app/components/thumbnail-maker/overview/overview.html",
|
|
8928
|
-
"purpose": "Create
|
|
8929
|
-
"useWhen": "Use for
|
|
8937
|
+
"purpose": "Create a square 300x300 thumbnail bitmap from an image with drag positioning and zoom controls.",
|
|
8938
|
+
"useWhen": "Use ngs-thumbnail-maker when users need to position and zoom an image inside a fixed square frame, then save the finished thumbnail as a data URL, Blob, or canvas. Good for avatars, profile images, CMS thumbnails, media library previews, product/user/project card images, and simple square preview generation. Provide the image URL or data URL through src, add helperText when users need drag instructions, and call api.getDataUrl(), api.toBlob(callback), or api.getCanvas() when saving. Combine with Upload or ngsUploadTrigger when users must select a local image first. Do not use ThumbnailMaker when the app needs arbitrary crop shapes, crop rectangles, circles, or crop coordinates; use Crop. Do not use it only to change displayed image width; use ImageResizer. Do not use it to view images; use ImageViewer or ImageZoomViewer. Do not use it as an image placeholder; use ImagePlaceholder. Do not use it for full canvas editing, layers, text, effects, or templates; use ImageDesigner. Do not use it as a plain upload picker without editing; use Upload.",
|
|
8930
8939
|
"exampleTopics": [
|
|
8931
8940
|
"Basic thumbnail maker",
|
|
8932
8941
|
"Thumbnail maker with helper text",
|
|
@@ -8990,8 +8999,8 @@
|
|
|
8990
8999
|
"sourceRoot": "projects/components/tiles/src",
|
|
8991
9000
|
"docsPath": "/components/tiles",
|
|
8992
9001
|
"docsOverviewSource": "projects/docs/src/app/components/tiles/overview/overview.html",
|
|
8993
|
-
"purpose": "Lay out
|
|
8994
|
-
"useWhen": "Use for dashboards,
|
|
9002
|
+
"purpose": "Lay out responsive dashboard tiles and support user-driven tile reordering/customization.",
|
|
9003
|
+
"useWhen": "Use ngs-tiles with ngs-tile when users can rearrange dashboard cards or widgets, customize a dashboard, or save a changed widget order. Good for editable dashboards, portal home pages, workspace widgets, configurable analytics cards, media/card boards, and dashboard builders. Tiles can be the layout host for config-driven dashboard renderers: the app can render lazy widget components inside each ngs-tile, show Skeleton while widgets load, and persist the final item order from orderChanged or layoutChanged. Use width, height, width.sm/md/lg/xl, and height.sm/md/lg/xl to define responsive tile spans, and ngsTileHandle for drag handles. Provide items so reorder events can map visual order back to app data. Use Grid only for static predefined dashboard/widget layouts that users do not rearrange. Do not use Tiles for ordinary static responsive page layout; use TailwindCSS grid/flex. Do not use for split panes with gutters; use Split. Do not use for one manually resized box; use ResizableContainer. Do not use for simple cards, lists, tables, or datasets without tile reordering; use Card, List, Table, or DataView. Do not use for status-column workflows; use KanbanBoard.",
|
|
8995
9004
|
"exampleTopics": [
|
|
8996
9005
|
"Basic tiles"
|
|
8997
9006
|
],
|
|
@@ -9070,8 +9079,8 @@
|
|
|
9070
9079
|
"sourceRoot": "projects/components/timeline/src",
|
|
9071
9080
|
"docsPath": "/components/timeline",
|
|
9072
9081
|
"docsOverviewSource": "projects/docs/src/app/components/timeline/overview/overview.html",
|
|
9073
|
-
"purpose": "Show
|
|
9074
|
-
"useWhen": "Use
|
|
9082
|
+
"purpose": "Show a vertical chronological history of events.",
|
|
9083
|
+
"useWhen": "Use ngs-timeline when users need to understand a sequence of events over time: audit logs, activity history, entity change history, project milestones, order or shipment history, workflow history, tracking events, and user actions. Use ngs-timeline-header to group events by date, month, phase, or period. Use ngs-timeline-item with ngs-timeline-timestamp, ngs-timeline-title, ngs-timeline-subtitle, ngs-timeline-description, ngs-timeline-attributes, and ngs-timeline-content to structure each event. Use ngsTimelineItemIndicator when the marker should show an actor, icon, status, or event type. Do not use Timeline for a realtime notification inbox or actionable notification feed; use Notifications. Do not use for a simple vertical collection without time/order meaning; use List. Do not use for tabular audit logs that need sorting, filtering, or many columns; use Table or DataView. Do not use for workflow steps the user must complete; use Stepper. Do not use for status columns; use KanbanBoard. Do not use for calendar/scheduler views or for a single operation status; use ProgressBar, Badge, or Status as appropriate.",
|
|
9075
9084
|
"exampleTopics": [
|
|
9076
9085
|
"Basic Timeline",
|
|
9077
9086
|
"Timeline With Timestamp",
|
|
@@ -9176,8 +9185,8 @@
|
|
|
9176
9185
|
"sourceRoot": "projects/components/timepicker/src",
|
|
9177
9186
|
"docsPath": "/components/timepicker",
|
|
9178
9187
|
"docsOverviewSource": "projects/docs/src/app/components/timepicker/overview/overview.html",
|
|
9179
|
-
"purpose": "Let users choose a time
|
|
9180
|
-
"useWhen": "Use
|
|
9188
|
+
"purpose": "Let users choose or type a time of day in a form field.",
|
|
9189
|
+
"useWhen": "Use input[ngsTimepicker] inside one ngs-form-field, connected to an ngs-timepicker instance, when a form needs a time of day: meeting time, event time, booking time, reminder time, deadline time, availability slot, report time filter, or schedule setting. Add ngs-timepicker-toggle as an icon suffix when users should open the dropdown explicitly. Use interval to control option steps such as 15, 30, or 60 minutes. Use min and max to limit selectable times. The input supports manual typing and localized display, while the model value can be a HH:mm-like string or a Date with the selected time merged into it. Combine Datepicker and Timepicker as separate controls when users need both date and time. Do not use Timepicker to choose a date; use Datepicker. Do not use it to choose a timezone; use TimezoneSelect. Do not use it for duration or numeric amounts of hours/minutes; use NumberInput or Slider. Do not use it for plain text without time validation; use ngsInput. Do not use it as a calendar, scheduler, or day-slot planner.",
|
|
9181
9190
|
"exampleTopics": [
|
|
9182
9191
|
"Basic time picker",
|
|
9183
9192
|
"Integration with Datepicker",
|
|
@@ -9259,8 +9268,8 @@
|
|
|
9259
9268
|
"sourceRoot": "projects/components/timezone-select/src",
|
|
9260
9269
|
"docsPath": "/forms/timezone",
|
|
9261
9270
|
"docsOverviewSource": "projects/docs/src/app/forms/timezone/overview/overview.html",
|
|
9262
|
-
"purpose": "Let users choose a
|
|
9263
|
-
"useWhen": "Use
|
|
9271
|
+
"purpose": "Let users choose an IANA time zone id in a form field.",
|
|
9272
|
+
"useWhen": "Use ngs-timezone-select inside one ngs-form-field when a form must store a real time zone id such as Europe/Warsaw or America/New_York. Good for profile timezone, account preferences, organization or tenant default timezone, scheduling settings, calendar settings, report default timezone, localization preferences, and admin settings where backend data needs an IANA timezone string. The control is searchable, groups time zones by region, supports Angular forms, required, disabled, placeholder, locale-aware labels, opened, and closed. Do not use TimezoneSelect to choose a time of day; use Timepicker. Do not use it to choose a date; use Datepicker. Do not use it to choose a country or region; use CountrySelect. Do not use it for language or locale selection; use a dedicated locale/language control or Select. Do not use it for generic custom options; use Select. Do not use it for durations, numeric offsets, or timezone math; use NumberInput, Slider, or app logic. Do not use timezone as a date format setting; use DateFormatSelect for display formats.",
|
|
9264
9273
|
"exampleTopics": [
|
|
9265
9274
|
"Basic timezone select"
|
|
9266
9275
|
],
|
|
@@ -9311,8 +9320,8 @@
|
|
|
9311
9320
|
"sourceRoot": "projects/components/toolbar/src",
|
|
9312
9321
|
"docsPath": "/components/toolbar",
|
|
9313
9322
|
"docsOverviewSource": "projects/docs/src/app/components/toolbar/overview/overview.html",
|
|
9314
|
-
"purpose": "
|
|
9315
|
-
"useWhen": "Use
|
|
9323
|
+
"purpose": "Provide a persistent command area for a page, panel, table, editor, canvas, or workspace surface.",
|
|
9324
|
+
"useWhen": "Use ngs-toolbar when a local surface needs a title, short local navigation, and frequently used actions in a stable horizontal or multi-row command area. Use ngs-toolbar-title for the local title, ngs-toolbar-spacer to separate groups, ngs-toolbar-row for multi-row command areas, ngs-toolbar-item for actions that should participate in responsive overflow, and ngs-toolbar-nav with ngs-toolbar-nav-link for short local links inside the toolbar. Good places include table headers, panel headers, admin page headers, editor surfaces, dashboards, canvas tools, and workspace tool surfaces. Do not use Toolbar as a generic flex layout for arbitrary content. Do not use it for floating contextual actions on selected rows or objects; use CommandBar. Do not use it for dropdown command lists; use Menu. Do not use it for primary application navigation; use Sidebar, Sidenav, or Navigation. Do not replace specialized TextEditor or CommentEditor toolbars with the generic Toolbar.",
|
|
9316
9325
|
"exampleTopics": [
|
|
9317
9326
|
"Basic Toolbar",
|
|
9318
9327
|
"Multi-row Toolbar",
|
|
@@ -9399,8 +9408,8 @@
|
|
|
9399
9408
|
"sourceRoot": "projects/components/tooltip/src",
|
|
9400
9409
|
"docsPath": "/components/tooltip",
|
|
9401
9410
|
"docsOverviewSource": "projects/docs/src/app/components/tooltip/overview/overview.html",
|
|
9402
|
-
"purpose": "Show short
|
|
9403
|
-
"useWhen": "Use
|
|
9411
|
+
"purpose": "Show a short helper message for one interface element on hover, focus, or touch.",
|
|
9412
|
+
"useWhen": "Use ngsTooltip as a directive on a trigger element when a short non-interactive helper message should explain an icon button, abbreviation, disabled state, dense control, compact label, or unclear affordance. Configure ngsTooltipPosition, ngsTooltipShowDelay, ngsTooltipHideDelay, ngsTooltipOffset, ngsTooltipDisabled, ngsTooltipClass, or ngsTooltipPositionAtOrigin when placement and timing need tuning. Export the directive as ngsTooltip when app logic must call show(), hide(), or toggle(). Keep tooltip text short and plain. Do not use Tooltip for interactive content, forms, action lists, rich previews, or long explanations; use Popover. Do not use it for command menus; use Menu. Do not use it for visible page messages; use Alert, Announcement, ActionRequired, or Incidents based on scope. Do not use it for form helper or validation text; use FormField hint and error. Do not use it for onboarding flows; use GuidedTour.",
|
|
9404
9413
|
"exampleTopics": [
|
|
9405
9414
|
"Basic Tooltip",
|
|
9406
9415
|
"Tooltip With a Custom Position",
|
|
@@ -9485,7 +9494,7 @@
|
|
|
9485
9494
|
"docsPath": "/components/tree",
|
|
9486
9495
|
"docsOverviewSource": "projects/docs/src/app/components/tree/overview/overview.html",
|
|
9487
9496
|
"purpose": "Display hierarchical data with expandable parent and child nodes.",
|
|
9488
|
-
"useWhen": "Use
|
|
9497
|
+
"useWhen": "Use ngs-tree when users need to inspect or navigate hierarchical data where parent and child levels matter: folders and files, categories, permissions, taxonomies, organization structures, nested settings, product/entity hierarchies, and other expandable trees. Use dataSource with childrenAccessor for nested/static data, or treeControl with a custom DataSource for flat trees and dynamic loading. Define node templates with *ngsTreeNodeDef and use when for different node types. Use ngsTreeNodePadding for indentation and ngsTreeNodeToggle for expand/collapse controls. Use ProgressBar or Skeleton inside node templates when children load on demand. Do not use Tree for a simple vertical collection; use List. Do not use it for primary application navigation; use Sidebar, Sidenav, Navigation, or RailNav. Do not use it for FAQ or settings sections; use ExpansionPanel. Do not use it for dense row data with columns, sorting, filters, or bulk actions; use Table or DataView. Do not use it for step-by-step workflows; use Stepper.",
|
|
9489
9498
|
"exampleTopics": [
|
|
9490
9499
|
"Basic tree",
|
|
9491
9500
|
"Tree with dynamic data"
|
|
@@ -9561,8 +9570,8 @@
|
|
|
9561
9570
|
"sourceRoot": "projects/components/upload/src",
|
|
9562
9571
|
"docsPath": "/components/upload",
|
|
9563
9572
|
"docsOverviewSource": "projects/docs/src/app/components/upload/overview/overview.html",
|
|
9564
|
-
"purpose": "
|
|
9565
|
-
"useWhen": "Use for
|
|
9573
|
+
"purpose": "Provide UI for selecting files, drag-and-drop upload areas, and file progress displays.",
|
|
9574
|
+
"useWhen": "Use Upload components when users need to choose local files, drop files into an upload area, or see selected/uploading files with progress, errors, retry, remove, or cancel actions. Use ngsUploadTrigger on a button or clickable element to open the native file picker. Use ngs-upload-area for drag-and-drop with ngsUploadAreaMainState, ngsUploadAreaDropState, ngsUploadAreaInvalidState, and ngsUploadAreaIcon. Use accept and multiple to control allowed file types and multi-select. Use ngs-upload-container with ngs-upload-allowed-types and ngs-upload-max-file-size for upload hints. Use ngs-file-list with ngs-file for vertical file rows, or ngs-files-grid with ngs-grid-file for compact file cards. Use ngs-file-control and ngsGridFileControl for file-level actions. The component emits fileSelected with the selected File objects; the application must perform validation, backend upload, retry, deletion, persistence, and security checks. Do not treat Upload as a backend uploader, storage manager, or import wizard by itself. Do not use it for editing selected images; use Crop, ImageResizer, ThumbnailMaker, or ImageDesigner after selection. Do not use it for rich editor image upload flows; use the TextEditor or CommentEditor upload APIs. Do not use it to manage an existing document table with sorting and filtering; use Table or DataView.",
|
|
9566
9575
|
"exampleTopics": [
|
|
9567
9576
|
"Basic Upload",
|
|
9568
9577
|
"Upload area",
|
|
@@ -9710,9 +9719,11 @@
|
|
|
9710
9719
|
"sourceRoot": "projects/components/video-player/src",
|
|
9711
9720
|
"docsPath": "/libraries/video-player",
|
|
9712
9721
|
"docsOverviewSource": "projects/docs/src/app/libraries/video-player/overview/overview.html",
|
|
9713
|
-
"purpose": "Play video
|
|
9714
|
-
"useWhen": "Use for media
|
|
9715
|
-
"exampleTopics": [
|
|
9722
|
+
"purpose": "Play video inline inside the current page, card, carousel, media preview, lesson, or workspace layout.",
|
|
9723
|
+
"useWhen": "Use ngs-video-player when video should stay embedded in the current layout with NgStarter-controlled playback UI. Pass src for the video source, optional thumbnailUrl for the poster preview, and orientation or payload.orientation for landscape, portrait, or square aspect ratio. Configure autoPlay, muted, disableClickToPlay, withCredentials, showPlayButton, showSpeaker, showFullscreen, and showDurationSlider to match the surface. Listen to play, pause, ended, loaded, and error for application state. Good for media previews, lessons, product videos, content previews, cards, carousel slides, and dashboard/workspace media blocks. The player wraps video.js and supports HLS m3u8 sources through video.js. Do not use VideoPlayer when the video should open as a focused overlay or lightbox; use VideoViewer. Do not use it as a gallery or list by itself; compose it with Carousel, Card, Grid, VideoViewer, or a layout component. Do not use it for YouTube, Vimeo, or other iframe-provider embeds when the provider player is required. Do not use it as a content editing API directly; use the ContentEditor video block for editable content.",
|
|
9724
|
+
"exampleTopics": [
|
|
9725
|
+
"Video Player"
|
|
9726
|
+
],
|
|
9716
9727
|
"minimalExample": null,
|
|
9717
9728
|
"exampleFiles": [],
|
|
9718
9729
|
"previewAsset": "projects/components/video-player/preview.svg",
|
|
@@ -9760,8 +9771,8 @@
|
|
|
9760
9771
|
"sourceRoot": "projects/components/video-viewer/src",
|
|
9761
9772
|
"docsPath": "/components/video-viewer",
|
|
9762
9773
|
"docsOverviewSource": "projects/docs/src/app/components/video-viewer/overview/overview.html",
|
|
9763
|
-
"purpose": "
|
|
9764
|
-
"useWhen": "Use for video attachments, previews, galleries, and media detail
|
|
9774
|
+
"purpose": "Open videos in a focused overlay or lightbox above the current page.",
|
|
9775
|
+
"useWhen": "Use VideoViewer when a thumbnail, preview card, compact inline player, attachment, gallery item, or media library item should open a larger focused video viewing experience. Put ngsVideoViewer on the preview container and ngsVideoViewerVideo on each clickable preview item. Pass sourceUrl for the video source, plus optional title, caption, description, or template directives ngsVideoViewerVideoTitle, ngsVideoViewerVideoCaption, and ngsVideoViewerVideoDescription. Configure orientation, payload, autoPlay, muted, showPlayButton, showSpeaker, showFullscreen, and showDurationSlider to control the underlying VideoPlayer in the overlay. Good for video attachments, media previews, galleries, lessons, product videos, and media detail flows. Do not use VideoViewer when video should stay inline in the current layout; use VideoPlayer. Do not use it as a carousel, grid, or gallery layout by itself; compose previews with Card, Grid, Carousel, or another layout. Do not use it as a generic modal or form dialog; use Dialog or Drawer. Do not use it for YouTube, Vimeo, or iframe-provider embeds when the provider player is required.",
|
|
9765
9776
|
"exampleTopics": [
|
|
9766
9777
|
"Basic Video Viewer"
|
|
9767
9778
|
],
|
|
@@ -9839,9 +9850,11 @@
|
|
|
9839
9850
|
"sourceRoot": "projects/components/visual-builder/src",
|
|
9840
9851
|
"docsPath": "/libraries/visual-builder",
|
|
9841
9852
|
"docsOverviewSource": "projects/docs/src/app/libraries/visual-builder/overview/overview.html",
|
|
9842
|
-
"purpose": "
|
|
9843
|
-
"useWhen": "
|
|
9844
|
-
"exampleTopics": [
|
|
9853
|
+
"purpose": "Experimental scaffold for a future no-code or low-code visual workspace.",
|
|
9854
|
+
"useWhen": "Do not use ngs-visual-builder for production admin screens, dashboards, visual editors, page builders, or real no-code/low-code workflows yet. The current component is only a placeholder: it has no inputs, outputs, layout regions, canvas, drag and drop, inspector, persistence, or editable block model. Mention it only as an experimental scaffold for future visual builder work. Use ContentEditor for block-based CMS/page content, ImageDesigner for creative image composition, Tiles for editable dashboard widgets or config-driven dashboard renderers, Grid for static dashboard layouts, FormRenderer for backend-driven forms, KanbanBoard for workflow columns, and normal NgStarter layout/components for admin screens.",
|
|
9855
|
+
"exampleTopics": [
|
|
9856
|
+
"Visual Builder"
|
|
9857
|
+
],
|
|
9845
9858
|
"minimalExample": null,
|
|
9846
9859
|
"exampleFiles": [],
|
|
9847
9860
|
"previewAsset": "projects/components/visual-builder/preview.svg",
|
|
@@ -41,13 +41,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
|
|
|
41
41
|
|
|
42
42
|
class CardHeader {
|
|
43
43
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: CardHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
44
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: CardHeader, isStandalone: true, selector: "ngs-card-header", host: { classAttribute: "ngs-card-header" }, ngImport: i0, template: "<div class=\"flex items-center gap-3\">\n <ng-content select=\"ngs-card-avatar, [ngs-card-avatar], [ngsCardAvatar]\"/>\n <div class=\"ngs-card-header-text\">\n <div>\n <ng-content select=\"ngs-card-title, [ngs-card-title], [ngsCardTitle]\"/>\n <ng-content select=\"ngs-card-subtitle, [ngs-card-subtitle], [ngsCardSubtitle]\"/>\n </div>\n <ng-content/>\n </div>\n</div>\n<div class=\"aside\">\n <ng-content select=\"ngs-card-aside, [ngs-card-aside], [ngsCardAside]\"/>\n</div>\n", styles: [":host{display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding:var(--ngs-card-padding, calc(var(--spacing, .25rem) * 3));gap:calc(var(--spacing, .25rem) * 3);flex:none}:host .aside:empty{display:none}:host .aside{flex:none}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
44
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: CardHeader, isStandalone: true, selector: "ngs-card-header", host: { classAttribute: "ngs-card-header" }, ngImport: i0, template: "<div class=\"flex h-full items-center gap-3\">\n <ng-content select=\"ngs-card-avatar, [ngs-card-avatar], [ngsCardAvatar]\"/>\n <div class=\"ngs-card-header-text\">\n <div>\n <ng-content select=\"ngs-card-title, [ngs-card-title], [ngsCardTitle]\"/>\n <ng-content select=\"ngs-card-subtitle, [ngs-card-subtitle], [ngsCardSubtitle]\"/>\n </div>\n <ng-content/>\n </div>\n</div>\n<div class=\"aside\">\n <ng-content select=\"ngs-card-aside, [ngs-card-aside], [ngsCardAside]\"/>\n</div>\n", styles: [":host{display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding:var(--ngs-card-padding, calc(var(--spacing, .25rem) * 3));gap:calc(var(--spacing, .25rem) * 3);flex:none}:host .aside:empty{display:none}:host .aside{flex:none}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
45
45
|
}
|
|
46
46
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: CardHeader, decorators: [{
|
|
47
47
|
type: Component,
|
|
48
48
|
args: [{ selector: 'ngs-card-header', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
49
49
|
'class': 'ngs-card-header'
|
|
50
|
-
}, template: "<div class=\"flex items-center gap-3\">\n <ng-content select=\"ngs-card-avatar, [ngs-card-avatar], [ngsCardAvatar]\"/>\n <div class=\"ngs-card-header-text\">\n <div>\n <ng-content select=\"ngs-card-title, [ngs-card-title], [ngsCardTitle]\"/>\n <ng-content select=\"ngs-card-subtitle, [ngs-card-subtitle], [ngsCardSubtitle]\"/>\n </div>\n <ng-content/>\n </div>\n</div>\n<div class=\"aside\">\n <ng-content select=\"ngs-card-aside, [ngs-card-aside], [ngsCardAside]\"/>\n</div>\n", styles: [":host{display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding:var(--ngs-card-padding, calc(var(--spacing, .25rem) * 3));gap:calc(var(--spacing, .25rem) * 3);flex:none}:host .aside:empty{display:none}:host .aside{flex:none}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
50
|
+
}, template: "<div class=\"flex h-full items-center gap-3\">\n <ng-content select=\"ngs-card-avatar, [ngs-card-avatar], [ngsCardAvatar]\"/>\n <div class=\"ngs-card-header-text\">\n <div>\n <ng-content select=\"ngs-card-title, [ngs-card-title], [ngsCardTitle]\"/>\n <ng-content select=\"ngs-card-subtitle, [ngs-card-subtitle], [ngsCardSubtitle]\"/>\n </div>\n <ng-content/>\n </div>\n</div>\n<div class=\"aside\">\n <ng-content select=\"ngs-card-aside, [ngs-card-aside], [ngsCardAside]\"/>\n</div>\n", styles: [":host{display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding:var(--ngs-card-padding, calc(var(--spacing, .25rem) * 3));gap:calc(var(--spacing, .25rem) * 3);flex:none}:host .aside:empty{display:none}:host .aside{flex:none}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
51
51
|
}] });
|
|
52
52
|
|
|
53
53
|
class CardTitle {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngstarter-ui-components-card.mjs","sources":["../../../projects/components/card/src/card-footer/card-footer.ts","../../../projects/components/card/src/card-footer/card-footer.html","../../../projects/components/card/src/config.ts","../../../projects/components/card/src/card/card.ts","../../../projects/components/card/src/card/card.html","../../../projects/components/card/src/card-header/card-header.ts","../../../projects/components/card/src/card-header/card-header.html","../../../projects/components/card/src/card-title/card-title.ts","../../../projects/components/card/src/card-title/card-title.html","../../../projects/components/card/src/card-subtitle/card-subtitle.ts","../../../projects/components/card/src/card-subtitle/card-subtitle.html","../../../projects/components/card/src/card-content/card-content.ts","../../../projects/components/card/src/card-content/card-content.html","../../../projects/components/card/src/card-actions/card-actions.ts","../../../projects/components/card/src/card-actions/card-actions.html","../../../projects/components/card/src/card-aside/card-aside.ts","../../../projects/components/card/src/card-aside/card-aside.html","../../../projects/components/card/src/card-image/card-image.ts","../../../projects/components/card/src/card-image/card-image.html","../../../projects/components/card/src/card-avatar/card-avatar.ts","../../../projects/components/card/ngstarter-ui-components-card.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-footer, [ngs-card-footer], [ngsCardFooter]',\n templateUrl: './card-footer.html',\n styleUrl: './card-footer.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-footer'\n }\n})\nexport class CardFooter {}\n","<ng-content />\n","import { InjectionToken, makeEnvironmentProviders, EnvironmentProviders } from '@angular/core';\n\nexport type CardAppearance = 'raised' | 'outlined' | 'filled';\n\nexport interface CardConfig {\n appearance?: CardAppearance;\n}\n\nexport const CARD_CONFIG = new InjectionToken<CardConfig>('CARD_CONFIG');\n\nexport function provideCard(config: CardConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: CARD_CONFIG, useValue: config }\n ]);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n contentChild,\n} from '@angular/core';\nimport { CardFooter } from '../card-footer/card-footer';\nimport { CARD_CONFIG, CardAppearance } from '../config';\n\n@Component({\n selector: 'ngs-card',\n exportAs: 'ngsCard',\n templateUrl: './card.html',\n styleUrl: './card.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card not-prose',\n '[class.ngs-card-outlined]': 'appearance() === \"outlined\"',\n '[class.ngs-card-filled]': 'appearance() === \"filled\"',\n '[class.ngs-card-raised]': 'appearance() === \"raised\"',\n },\n})\nexport class Card {\n private _config = inject(CARD_CONFIG, { optional: true });\n\n appearance = input<CardAppearance>(this._config?.appearance || 'outlined');\n\n readonly _footer = contentChild(CardFooter);\n\n get hasFooter(): boolean {\n return !!this._footer();\n }\n}\n","<ng-content/>\n@if (hasFooter) {\n <ng-content select=\"ngs-card-footer\"/>\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-header',\n standalone: true,\n imports: [\n ],\n templateUrl: './card-header.html',\n styleUrl: './card-header.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-header'\n }\n})\nexport class CardHeader {}\n","<div class=\"flex items-center gap-3\">\n <ng-content select=\"ngs-card-avatar, [ngs-card-avatar], [ngsCardAvatar]\"/>\n <div class=\"ngs-card-header-text\">\n <div>\n <ng-content select=\"ngs-card-title, [ngs-card-title], [ngsCardTitle]\"/>\n <ng-content select=\"ngs-card-subtitle, [ngs-card-subtitle], [ngsCardSubtitle]\"/>\n </div>\n <ng-content/>\n </div>\n</div>\n<div class=\"aside\">\n <ng-content select=\"ngs-card-aside, [ngs-card-aside], [ngsCardAside]\"/>\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-title, [ngs-card-title], [ngsCardTitle]',\n exportAs: 'ngsCardTitle',\n standalone: true,\n templateUrl: './card-title.html',\n styleUrls: ['./card-title.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-title'\n }\n})\nexport class CardTitle {}\n","<ng-content />\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-subtitle, [ngs-card-subtitle], [ngsCardSubtitle]',\n exportAs: 'ngsCardSubtitle',\n standalone: true,\n templateUrl: './card-subtitle.html',\n styleUrl: './card-subtitle.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-subtitle'\n }\n})\nexport class CardSubtitle {}\n","<ng-content />\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-content, [ngs-card-content], [ngsCardContent]',\n exportAs: 'ngsCardContent',\n standalone: true,\n templateUrl: './card-content.html',\n styleUrls: ['./card-content.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-content',\n '[class.without-padding]': 'withoutPadding()',\n }\n})\nexport class CardContent {\n withoutPadding = input(false, {\n transform: booleanAttribute\n })\n}\n","<ng-content />\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type CardActionsPosition = 'start' | 'center' | 'end' | 'between';\n\n@Component({\n selector: 'ngs-card-actions, [ngs-card-actions], [ngsCardActions]',\n standalone: true,\n templateUrl: './card-actions.html',\n styleUrl: './card-actions.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-actions',\n '[class.ngs-card-actions-align-end]': 'align() === \"end\"',\n '[class.ngs-card-actions-align-center]': 'align() === \"center\"',\n '[class.ngs-card-actions-align-between]': 'align() === \"between\"',\n }\n})\nexport class CardActions {\n align = input<CardActionsPosition>('start');\n}\n","<ng-content/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-aside, [ngs-card-aside], ngsCardAside',\n imports: [],\n templateUrl: './card-aside.html',\n styleUrl: './card-aside.scss',\n})\nexport class CardAside {\n\n}\n","<ng-content/>\n","import { ChangeDetectionStrategy, Component, Directive } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-image, [ngs-card-image], [ngsCardImage]',\n standalone: true,\n templateUrl: './card-image.html',\n styleUrl: './card-image.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-image'\n }\n})\nexport class CardImage {}\n\n@Directive({\n selector: '[ngs-card-sm-image], [ngsCardImageSmall]',\n standalone: true,\n host: {\n 'class': 'ngs-card-image ngs-card-sm-image'\n }\n})\nexport class CardImageSmall {}\n\n@Directive({\n selector: '[ngs-card-md-image], [ngsCardImageMedium]',\n standalone: true,\n host: {\n 'class': 'ngs-card-image ngs-card-md-image'\n }\n})\nexport class CardImageMedium {}\n\n@Directive({\n selector: '[ngs-card-lg-image], [ngsCardImageLarge]',\n standalone: true,\n host: {\n 'class': 'ngs-card-image ngs-card-lg-image'\n }\n})\nexport class CardImageLarge {}\n\n@Directive({\n selector: '[ngs-card-xl-image], [ngsCardImageXLarge]',\n standalone: true,\n host: {\n 'class': 'ngs-card-image ngs-card-xl-image'\n }\n})\nexport class CardImageXLarge {}\n","<ng-content />\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: 'ngs-card-avatar, [ngs-card-avatar], [ngsCardAvatar]',\n standalone: true,\n host: {\n 'class': 'ngs-card-avatar'\n },\n})\nexport class CardAvatar {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngstarter-ui-components-card.mjs","sources":["../../../projects/components/card/src/card-footer/card-footer.ts","../../../projects/components/card/src/card-footer/card-footer.html","../../../projects/components/card/src/config.ts","../../../projects/components/card/src/card/card.ts","../../../projects/components/card/src/card/card.html","../../../projects/components/card/src/card-header/card-header.ts","../../../projects/components/card/src/card-header/card-header.html","../../../projects/components/card/src/card-title/card-title.ts","../../../projects/components/card/src/card-title/card-title.html","../../../projects/components/card/src/card-subtitle/card-subtitle.ts","../../../projects/components/card/src/card-subtitle/card-subtitle.html","../../../projects/components/card/src/card-content/card-content.ts","../../../projects/components/card/src/card-content/card-content.html","../../../projects/components/card/src/card-actions/card-actions.ts","../../../projects/components/card/src/card-actions/card-actions.html","../../../projects/components/card/src/card-aside/card-aside.ts","../../../projects/components/card/src/card-aside/card-aside.html","../../../projects/components/card/src/card-image/card-image.ts","../../../projects/components/card/src/card-image/card-image.html","../../../projects/components/card/src/card-avatar/card-avatar.ts","../../../projects/components/card/ngstarter-ui-components-card.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-footer, [ngs-card-footer], [ngsCardFooter]',\n templateUrl: './card-footer.html',\n styleUrl: './card-footer.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-footer'\n }\n})\nexport class CardFooter {}\n","<ng-content />\n","import { InjectionToken, makeEnvironmentProviders, EnvironmentProviders } from '@angular/core';\n\nexport type CardAppearance = 'raised' | 'outlined' | 'filled';\n\nexport interface CardConfig {\n appearance?: CardAppearance;\n}\n\nexport const CARD_CONFIG = new InjectionToken<CardConfig>('CARD_CONFIG');\n\nexport function provideCard(config: CardConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: CARD_CONFIG, useValue: config }\n ]);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n contentChild,\n} from '@angular/core';\nimport { CardFooter } from '../card-footer/card-footer';\nimport { CARD_CONFIG, CardAppearance } from '../config';\n\n@Component({\n selector: 'ngs-card',\n exportAs: 'ngsCard',\n templateUrl: './card.html',\n styleUrl: './card.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card not-prose',\n '[class.ngs-card-outlined]': 'appearance() === \"outlined\"',\n '[class.ngs-card-filled]': 'appearance() === \"filled\"',\n '[class.ngs-card-raised]': 'appearance() === \"raised\"',\n },\n})\nexport class Card {\n private _config = inject(CARD_CONFIG, { optional: true });\n\n appearance = input<CardAppearance>(this._config?.appearance || 'outlined');\n\n readonly _footer = contentChild(CardFooter);\n\n get hasFooter(): boolean {\n return !!this._footer();\n }\n}\n","<ng-content/>\n@if (hasFooter) {\n <ng-content select=\"ngs-card-footer\"/>\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-header',\n standalone: true,\n imports: [\n ],\n templateUrl: './card-header.html',\n styleUrl: './card-header.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-header'\n }\n})\nexport class CardHeader {}\n","<div class=\"flex h-full items-center gap-3\">\n <ng-content select=\"ngs-card-avatar, [ngs-card-avatar], [ngsCardAvatar]\"/>\n <div class=\"ngs-card-header-text\">\n <div>\n <ng-content select=\"ngs-card-title, [ngs-card-title], [ngsCardTitle]\"/>\n <ng-content select=\"ngs-card-subtitle, [ngs-card-subtitle], [ngsCardSubtitle]\"/>\n </div>\n <ng-content/>\n </div>\n</div>\n<div class=\"aside\">\n <ng-content select=\"ngs-card-aside, [ngs-card-aside], [ngsCardAside]\"/>\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-title, [ngs-card-title], [ngsCardTitle]',\n exportAs: 'ngsCardTitle',\n standalone: true,\n templateUrl: './card-title.html',\n styleUrls: ['./card-title.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-title'\n }\n})\nexport class CardTitle {}\n","<ng-content />\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-subtitle, [ngs-card-subtitle], [ngsCardSubtitle]',\n exportAs: 'ngsCardSubtitle',\n standalone: true,\n templateUrl: './card-subtitle.html',\n styleUrl: './card-subtitle.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-subtitle'\n }\n})\nexport class CardSubtitle {}\n","<ng-content />\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-content, [ngs-card-content], [ngsCardContent]',\n exportAs: 'ngsCardContent',\n standalone: true,\n templateUrl: './card-content.html',\n styleUrls: ['./card-content.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-content',\n '[class.without-padding]': 'withoutPadding()',\n }\n})\nexport class CardContent {\n withoutPadding = input(false, {\n transform: booleanAttribute\n })\n}\n","<ng-content />\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type CardActionsPosition = 'start' | 'center' | 'end' | 'between';\n\n@Component({\n selector: 'ngs-card-actions, [ngs-card-actions], [ngsCardActions]',\n standalone: true,\n templateUrl: './card-actions.html',\n styleUrl: './card-actions.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-actions',\n '[class.ngs-card-actions-align-end]': 'align() === \"end\"',\n '[class.ngs-card-actions-align-center]': 'align() === \"center\"',\n '[class.ngs-card-actions-align-between]': 'align() === \"between\"',\n }\n})\nexport class CardActions {\n align = input<CardActionsPosition>('start');\n}\n","<ng-content/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-aside, [ngs-card-aside], ngsCardAside',\n imports: [],\n templateUrl: './card-aside.html',\n styleUrl: './card-aside.scss',\n})\nexport class CardAside {\n\n}\n","<ng-content/>\n","import { ChangeDetectionStrategy, Component, Directive } from '@angular/core';\n\n@Component({\n selector: 'ngs-card-image, [ngs-card-image], [ngsCardImage]',\n standalone: true,\n templateUrl: './card-image.html',\n styleUrl: './card-image.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-card-image'\n }\n})\nexport class CardImage {}\n\n@Directive({\n selector: '[ngs-card-sm-image], [ngsCardImageSmall]',\n standalone: true,\n host: {\n 'class': 'ngs-card-image ngs-card-sm-image'\n }\n})\nexport class CardImageSmall {}\n\n@Directive({\n selector: '[ngs-card-md-image], [ngsCardImageMedium]',\n standalone: true,\n host: {\n 'class': 'ngs-card-image ngs-card-md-image'\n }\n})\nexport class CardImageMedium {}\n\n@Directive({\n selector: '[ngs-card-lg-image], [ngsCardImageLarge]',\n standalone: true,\n host: {\n 'class': 'ngs-card-image ngs-card-lg-image'\n }\n})\nexport class CardImageLarge {}\n\n@Directive({\n selector: '[ngs-card-xl-image], [ngsCardImageXLarge]',\n standalone: true,\n host: {\n 'class': 'ngs-card-image ngs-card-xl-image'\n }\n})\nexport class CardImageXLarge {}\n","<ng-content />\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: 'ngs-card-avatar, [ngs-card-avatar], [ngsCardAvatar]',\n standalone: true,\n host: {\n 'class': 'ngs-card-avatar'\n },\n})\nexport class CardAvatar {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngstarter-ui/components",
|
|
3
3
|
"description": "NgStarter - AI-friendly Enterprise Angular UI Components and Admin Panel",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.36",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/elementarlabsdev/ngstarter.git"
|