@ngstarter-ui/components 21.0.47 → 21.0.49

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.
@@ -3080,6 +3080,7 @@
3080
3080
  "Data view pinning pagination",
3081
3081
  "Data view refresh",
3082
3082
  "Data view resizable columns",
3083
+ "Data view row click selection",
3083
3084
  "Data view server side empty state",
3084
3085
  "Data view server side",
3085
3086
  "Data view sticky columns",
@@ -3142,10 +3143,12 @@
3142
3143
  "DataViewPinAlign",
3143
3144
  "DataViewRowModelType",
3144
3145
  "DataViewRowSelectionEvent",
3146
+ "DataViewRowSelectionEventSource",
3145
3147
  "DataViewState",
3146
3148
  "provideDataView"
3147
3149
  ],
3148
3150
  "inputs": [
3151
+ "allowSingleRowSelectionByClick",
3149
3152
  "autoHeight",
3150
3153
  "bodyScroll",
3151
3154
  "bufferRows",
@@ -4185,13 +4188,13 @@
4185
4188
  "name": "file-type-gallery-example",
4186
4189
  "title": "File type gallery",
4187
4190
  "file": "projects/docs/src/app/components/file-type/_examples/file-type-gallery-example/file-type-gallery-example.html",
4188
- "source": "<div class=\"grid grid-cols-3 gap-4 sm:grid-cols-4 md:grid-cols-5\">\n @for (type of types(); track type) {\n <div class=\"flex flex-col items-center gap-2 rounded-lg border border-subtle p-4\">\n <ngs-file-type [extension]=\"type\" class=\"size-16\"/>\n <div class=\"text-xs uppercase text-secondary\">{{ type }}</div>\n </div>\n }\n</div>"
4191
+ "source": "<div class=\"grid grid-cols-3 gap-4 sm:grid-cols-4 md:grid-cols-5\">\n @for (type of types(); track type) {\n <div class=\"flex flex-col items-center gap-2 rounded-lg border border-border p-4\">\n <ngs-file-type [extension]=\"type\" class=\"size-16\"/>\n <div class=\"text-xs uppercase text-secondary\">{{ type }}</div>\n </div>\n }\n</div>"
4189
4192
  },
4190
4193
  {
4191
4194
  "name": "file-type-mime-example",
4192
4195
  "title": "File type mime",
4193
4196
  "file": "projects/docs/src/app/components/file-type/_examples/file-type-mime-example/file-type-mime-example.html",
4194
- "source": "<div class=\"grid gap-4 sm:grid-cols-2\">\n @for (file of files(); track file.name) {\n <div class=\"flex items-center gap-4 rounded-lg border border-subtle p-4\">\n <ngs-file-type [mimeType]=\"file.mimeType\" [fallback]=\"file.fallback\" class=\"size-12\"/>\n <div class=\"min-w-0\">\n <div class=\"truncate text-sm\">{{ file.name }}</div>\n <div class=\"truncate text-xs text-secondary\">{{ file.mimeType }}</div>\n </div>\n </div>\n }\n</div>"
4197
+ "source": "<div class=\"grid gap-4 sm:grid-cols-2\">\n @for (file of files(); track file.name) {\n <div class=\"flex items-center gap-4 rounded-lg border border-border p-4\">\n <ngs-file-type [mimeType]=\"file.mimeType\" [fallback]=\"file.fallback\" class=\"size-12\"/>\n <div class=\"min-w-0\">\n <div class=\"truncate text-sm\">{{ file.name }}</div>\n <div class=\"truncate text-xs text-secondary\">{{ file.mimeType }}</div>\n </div>\n </div>\n }\n</div>"
4195
4198
  }
4196
4199
  ],
4197
4200
  "previewAsset": "projects/components/file-type/preview.svg",
@@ -4368,12 +4371,12 @@
4368
4371
  "FormBuilderSchema shape: { title?: string; fields?: FormBuilderField[]; layout?: FormBuilderLayoutItem[]; sections: FormBuilderSection[] }.",
4369
4372
  "Root-level fields live in schema.fields and can be placed outside sections. Sections live in schema.sections and contain section.fields. The optional schema.layout array controls top-level canvas order with items like { kind: \"field\" | \"section\", id }.",
4370
4373
  "FormBuilderSection shape: { id: string; title: string; description?: string; collapsed?: boolean; fields: FormBuilderField[] }.",
4371
- "FormBuilderField shape: { id: string; name: string; type: string; kind?: \"field\" | \"layout\" | \"static\"; label: string; placeholder?: string; hint?: string; defaultValue?: any; width?: 1..12; multiple?: boolean; clearable?: boolean; required?: boolean; disabled?: boolean; readonly?: boolean; options?: FormBuilderOption[]; validation?: FormBuilderValidationRule[]; visibility?: { form?: boolean; email?: boolean; pdf?: boolean; condition?: string }; settings?: Record<string, any>; children?: FormBuilderField[] }.",
4374
+ "FormBuilderField shape: { id: string; name: string; type: string; kind?: \"field\" | \"layout\" | \"static\"; label: string; placeholder?: string; hint?: string; defaultValue?: any; width?: 1..12; multiple?: boolean; clearable?: boolean; required?: boolean; disabled?: boolean; readonly?: boolean; options?: FormBuilderOption[]; validation?: FormBuilderValidationRule[]; settings?: Record<string, any>; children?: FormBuilderField[] }.",
4372
4375
  "Layout blocks are represented as fields with kind: \"layout\". The built-in group block uses type: \"group\", width: 12, and children: FormBuilderField[]. Section is a top-level FormBuilderSection, not a child field, and should not be nested inside another section/group.",
4373
4376
  "Static blocks are represented as fields with kind: \"static\". The built-in spacer block uses type: \"spacer\", width: 12, and settings.height with one of 8, 16, 24, 32, 48, or 64.",
4374
4377
  "Use width as a 12-column span. Default fields are 12 columns unless a narrower width is set. Nested children in group are sorted and rendered inside that group container.",
4375
- "Option fields use options entries { label: string; value: any; selected?: boolean }. For select, multiple controls array values; clearable enables the clear action. For radio, settings.orientation is \"vertical\" by default and can be \"horizontal\". Date and time fields include type: \"date\" for a single date, type: \"time\" for HH:mm time values, and type: \"date-range\" for a DateRange-like value with start/end dates. Upload fields use type: \"upload\", multiple for File[] values, and settings.accept for comma-separated MIME types such as \"*/*\" or \"image/*,application/pdf\". Upload handling can be provided with [uploadCallback] on ngs-form-builder/ngs-form-renderer or globally through provideFormBuilder({ uploadCallback }). The callback receives { field, control, event, files, fileList, multiple } and may return sync/async value stored in the form control.",
4376
- "Use <ngs-form-renderer> from @ngstarter-ui/components/form-builder to render a saved FormBuilderSchema as a runtime form. The Angular class export is FormBuilderRenderer.",
4378
+ "Option fields use options entries { label: string; value: any; selected?: boolean }. For select, multiple controls array values; clearable enables the clear action. For radio, settings.orientation is \"vertical\" by default and can be \"horizontal\". Hidden fields use type: \"hidden\" and render as native <input type=\"hidden\"> controls included in raw form values. Date and time fields include type: \"date\" for a single date, type: \"time\" for HH:mm time values, and type: \"date-range\" for a DateRange-like value with start/end dates. Upload fields use type: \"upload\", multiple for File[] values, and settings.accept for comma-separated MIME types such as \"*/*\" or \"image/*,application/pdf\". Upload handling can be provided with [uploadCallback] on ngs-form-builder/ngs-form-renderer or globally through provideFormBuilder({ uploadCallback }). The callback receives { field, control, event, files, fileList, multiple } and may return sync/async value stored in the form control.",
4379
+ "Use <ngs-form-renderer> from @ngstarter-ui/components/form-builder to render a saved FormBuilderSchema as a runtime form. The Angular class export is FormRenderer.",
4377
4380
  "Register custom placeholders through provideFormBuilder({ fields/items/settings }) using formBuilderField(), formBuilderItem(), and formBuilderSettings(). Custom field definitions can provide defaults, renderer, settings, validators, acceptsChildren, group, icon, and kind."
4378
4381
  ],
4379
4382
  "exampleTopics": [
@@ -4444,7 +4447,6 @@
4444
4447
  "FormBuilderItemKind",
4445
4448
  "FormBuilderLayoutItem",
4446
4449
  "FormBuilderOption",
4447
- "FormBuilderRenderer",
4448
4450
  "FormBuilderSchema",
4449
4451
  "FormBuilderSection",
4450
4452
  "FormBuilderSectionSettingsContext",
@@ -4458,13 +4460,14 @@
4458
4460
  "FormBuilderUploadCallback",
4459
4461
  "FormBuilderUploadContext",
4460
4462
  "FormBuilderValidationRule",
4461
- "FormBuilderVisibility",
4463
+ "FormRenderer",
4462
4464
  "provideFormBuilder",
4463
4465
  "provideFormBuilderField",
4464
4466
  "provideFormBuilderFields",
4465
4467
  "validatorsFromRules"
4466
4468
  ],
4467
4469
  "inputs": [
4470
+ "canvasDropPlaceholderDelay",
4468
4471
  "control",
4469
4472
  "definitions",
4470
4473
  "editableCanvas",
@@ -4487,6 +4490,7 @@
4487
4490
  ],
4488
4491
  "cssTokens": [
4489
4492
  "--ngs-card-padding",
4493
+ "--ngs-color-border",
4490
4494
  "--ngs-color-danger",
4491
4495
  "--ngs-color-on-primary-container",
4492
4496
  "--ngs-color-on-surface",
@@ -4495,7 +4499,6 @@
4495
4499
  "--ngs-color-primary",
4496
4500
  "--ngs-color-primary-container",
4497
4501
  "--ngs-color-surface",
4498
- "--ngs-color-surface-container-low",
4499
4502
  "--ngs-color-surface-container-lowest",
4500
4503
  "--ngs-field-radius",
4501
4504
  "--ngs-font-size-base",
@@ -4503,6 +4506,7 @@
4503
4506
  "--ngs-font-size-sm",
4504
4507
  "--ngs-font-size-xs",
4505
4508
  "--ngs-line-height-base",
4509
+ "--ngs-radius-current",
4506
4510
  "--ngs-radius-lg",
4507
4511
  "--ngs-radius-md",
4508
4512
  "--ngs-radius-sm",
@@ -5721,13 +5725,13 @@
5721
5725
  "Layout with nested layouts example",
5722
5726
  "Layout with nested layouts"
5723
5727
  ],
5724
- "minimalExample": "<div class=\"h-[300px] border border-muted\">\n <ngs-layout>\n <ngs-layout-sidebar>\n <div class=\"p-6 border-r border-e-muted h-full w-[240px]\">Sidebar</div>\n </ngs-layout-sidebar>\n <ngs-layout-content class=\"p-6\">\n Body\n </ngs-layout-content>\n <ngs-layout-aside>\n <div class=\"p-6 border-l border-s-muted h-full w-[200px]\">Aside</div>\n </ngs-layout-aside>\n </ngs-layout>\n</div>",
5728
+ "minimalExample": "<div class=\"h-[300px] border border-muted\">\n <ngs-layout>\n <ngs-layout-sidebar>\n <div class=\"p-6 border-r border-e-muted h-full w-[240px]\">Sidebar</div>\n </ngs-layout-sidebar>\n <ngs-layout-content class=\"p-6\">\n Body\n </ngs-layout-content>\n <ngs-layout-aside>\n <div class=\"p-6 border-s border-s-muted h-full w-[200px]\">Aside</div>\n </ngs-layout-aside>\n </ngs-layout>\n</div>",
5725
5729
  "exampleFiles": [
5726
5730
  {
5727
5731
  "name": "layout-aside-example",
5728
5732
  "title": "Layout aside",
5729
5733
  "file": "projects/docs/src/app/components/layout/_examples/layout-aside-example/layout-aside-example.html",
5730
- "source": "<div class=\"h-[300px] border border-muted\">\n <ngs-layout>\n <ngs-layout-sidebar>\n <div class=\"p-6 border-r border-e-muted h-full w-[240px]\">Sidebar</div>\n </ngs-layout-sidebar>\n <ngs-layout-content class=\"p-6\">\n Body\n </ngs-layout-content>\n <ngs-layout-aside>\n <div class=\"p-6 border-l border-s-muted h-full w-[200px]\">Aside</div>\n </ngs-layout-aside>\n </ngs-layout>\n</div>"
5734
+ "source": "<div class=\"h-[300px] border border-muted\">\n <ngs-layout>\n <ngs-layout-sidebar>\n <div class=\"p-6 border-r border-e-muted h-full w-[240px]\">Sidebar</div>\n </ngs-layout-sidebar>\n <ngs-layout-content class=\"p-6\">\n Body\n </ngs-layout-content>\n <ngs-layout-aside>\n <div class=\"p-6 border-s border-s-muted h-full w-[200px]\">Aside</div>\n </ngs-layout-aside>\n </ngs-layout>\n</div>"
5731
5735
  },
5732
5736
  {
5733
5737
  "name": "layout-footer-example",
@@ -9427,7 +9431,7 @@
9427
9431
  "name": "tab-panel-with-panels-inside-example",
9428
9432
  "title": "Tab panel with panels inside",
9429
9433
  "file": "projects/docs/src/app/navigation/tab-panel/_examples/tab-panel-with-panels-inside-example/tab-panel-with-panels-inside-example.html",
9430
- "source": "<div class=\"flex gap-10\">\n <ngs-tab-panel activeItemId=\"home\" class=\"h-[500px]\">\n <ngs-tab-panel-content>\n <ngs-tab-panel-nav>\n <ngs-tab-panel-item for=\"home\">\n <ngs-icon name=\"fluent:home-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Home</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"code\">\n <ngs-icon name=\"fluent:code-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Code</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n </ngs-tab-panel-nav>\n </ngs-tab-panel-content>\n <ngs-tab-panel-aside class=\"bg-surface-container-low rounded-xl\">\n <ng-template ngsTabPanelAsideContent=\"home\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-subtle flex items-center px-4\">Home Header</ngs-panel-header>\n <ngs-panel-content class=\"p-4\">\n <div class=\"h-[1000px]\">Home Content</div>\n </ngs-panel-content>\n <ngs-panel-footer class=\"border-t border-t-subtle flex items-center px-4\">Footer</ngs-panel-footer>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"code\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-subtle flex items-center px-4\">Code Header</ngs-panel-header>\n <ngs-panel-content class=\"p-4\">\n <div class=\"h-[1000px]\">Code Content</div>\n </ngs-panel-content>\n <ngs-panel-footer class=\"border-t border-t-subtle flex items-center px-4\">Footer</ngs-panel-footer>\n </ngs-panel>\n </ng-\n..."
9434
+ "source": "<div class=\"flex gap-10\">\n <ngs-tab-panel activeItemId=\"home\" class=\"h-[500px]\">\n <ngs-tab-panel-content>\n <ngs-tab-panel-nav>\n <ngs-tab-panel-item for=\"home\">\n <ngs-icon name=\"fluent:home-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Home</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n <ngs-tab-panel-item for=\"code\">\n <ngs-icon name=\"fluent:code-24-regular\" ngsTabPanelItemIcon/>\n <ngs-tab-panel-item-text>Code</ngs-tab-panel-item-text>\n </ngs-tab-panel-item>\n </ngs-tab-panel-nav>\n </ngs-tab-panel-content>\n <ngs-tab-panel-aside class=\"bg-surface-container-low rounded-xl\">\n <ng-template ngsTabPanelAsideContent=\"home\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Home Header</ngs-panel-header>\n <ngs-panel-content class=\"p-4\">\n <div class=\"h-[1000px]\">Home Content</div>\n </ngs-panel-content>\n <ngs-panel-footer class=\"border-t border-t-border flex items-center px-4\">Footer</ngs-panel-footer>\n </ngs-panel>\n </ng-template>\n <ng-template ngsTabPanelAsideContent=\"code\">\n <ngs-panel>\n <ngs-panel-header class=\"border-b border-b-border flex items-center px-4\">Code Header</ngs-panel-header>\n <ngs-panel-content class=\"p-4\">\n <div class=\"h-[1000px]\">Code Content</div>\n </ngs-panel-content>\n <ngs-panel-footer class=\"border-t border-t-border flex items-center px-4\">Footer</ngs-panel-footer>\n </ngs-panel>\n </ng-\n..."
9431
9435
  }
9432
9436
  ],
9433
9437
  "previewAsset": "projects/components/tab-panel/preview.svg",
@@ -9732,12 +9736,12 @@
9732
9736
  "--ngs-color-border",
9733
9737
  "--ngs-color-on-surface-variant",
9734
9738
  "--ngs-color-primary",
9735
- "--ngs-color-subtle",
9736
9739
  "--ngs-color-surface-container-high",
9737
9740
  "--ngs-tab-content-padding",
9738
9741
  "--ngs-tab-group-animation-duration",
9739
9742
  "--ngs-tab-group-header-border-bottom",
9740
9743
  "--ngs-tab-group-header-border-top",
9744
+ "--ngs-tab-group-header-height",
9741
9745
  "--ngs-tab-group-pagination-control-after-border-left",
9742
9746
  "--ngs-tab-group-pagination-control-before-border-right",
9743
9747
  "--ngs-tab-label-active-border-bottom",
@@ -10301,25 +10305,25 @@
10301
10305
  "Toolbar overflow",
10302
10306
  "Toolbar nav"
10303
10307
  ],
10304
- "minimalExample": "<ngs-toolbar>\n <ngs-toolbar-title>My App</ngs-toolbar-title>\n <ngs-toolbar-spacer/>\n <button>Login</button>\n</ngs-toolbar>",
10308
+ "minimalExample": "<ngs-toolbar>\n <ngs-toolbar-title appearance=\"large\">My App</ngs-toolbar-title>\n <ngs-toolbar-spacer/>\n <button>Login</button>\n</ngs-toolbar>",
10305
10309
  "exampleFiles": [
10306
10310
  {
10307
10311
  "name": "basic-toolbar-example",
10308
10312
  "title": "Basic toolbar",
10309
10313
  "file": "projects/docs/src/app/components/toolbar/_examples/basic-toolbar-example/basic-toolbar-example.html",
10310
- "source": "<ngs-toolbar>\n <ngs-toolbar-title>My App</ngs-toolbar-title>\n <ngs-toolbar-spacer/>\n <button>Login</button>\n</ngs-toolbar>"
10314
+ "source": "<ngs-toolbar>\n <ngs-toolbar-title appearance=\"large\">My App</ngs-toolbar-title>\n <ngs-toolbar-spacer/>\n <button>Login</button>\n</ngs-toolbar>"
10311
10315
  },
10312
10316
  {
10313
10317
  "name": "multi-row-toolbar-example",
10314
10318
  "title": "Multi row toolbar",
10315
10319
  "file": "projects/docs/src/app/components/toolbar/_examples/multi-row-toolbar-example/multi-row-toolbar-example.html",
10316
- "source": "<ngs-toolbar>\n <ngs-toolbar-row>\n <ngs-toolbar-title>Multi-row Toolbar</ngs-toolbar-title>\n <ngs-toolbar-spacer></ngs-toolbar-spacer>\n <ngs-toolbar-item>Menu</ngs-toolbar-item>\n </ngs-toolbar-row>\n <ngs-toolbar-row>\n <ngs-toolbar-item>Second row content</ngs-toolbar-item>\n </ngs-toolbar-row>\n</ngs-toolbar>"
10320
+ "source": "<ngs-toolbar>\n <ngs-toolbar-row>\n <ngs-toolbar-title appearance=\"large\">Multi-row Toolbar</ngs-toolbar-title>\n <ngs-toolbar-spacer></ngs-toolbar-spacer>\n <ngs-toolbar-item>Menu</ngs-toolbar-item>\n </ngs-toolbar-row>\n <ngs-toolbar-row>\n <ngs-toolbar-item>Second row content</ngs-toolbar-item>\n </ngs-toolbar-row>\n</ngs-toolbar>"
10317
10321
  },
10318
10322
  {
10319
10323
  "name": "toolbar-nav-example",
10320
10324
  "title": "Toolbar nav",
10321
10325
  "file": "projects/docs/src/app/components/toolbar/_examples/toolbar-nav-example/toolbar-nav-example.html",
10322
- "source": "<ngs-toolbar>\n <ngs-toolbar-title>Nav Example</ngs-toolbar-title>\n <ngs-toolbar-nav>\n <ngs-toolbar-nav-link [active]=\"true\">Home</ngs-toolbar-nav-link>\n <ngs-toolbar-nav-link>About</ngs-toolbar-nav-link>\n <ngs-toolbar-nav-link>Contact</ngs-toolbar-nav-link>\n </ngs-toolbar-nav>\n <ngs-toolbar-spacer />\n <ngs-toolbar-nav>\n <a ngs-toolbar-nav-link [routerLink]=\"['/dashboard']\">Dashboard</a>\n </ngs-toolbar-nav>\n</ngs-toolbar>"
10326
+ "source": "<ngs-toolbar>\n <ngs-toolbar-title appearance=\"large\">Nav Example</ngs-toolbar-title>\n <ngs-toolbar-nav>\n <ngs-toolbar-nav-link [active]=\"true\">Home</ngs-toolbar-nav-link>\n <ngs-toolbar-nav-link>About</ngs-toolbar-nav-link>\n <ngs-toolbar-nav-link>Contact</ngs-toolbar-nav-link>\n </ngs-toolbar-nav>\n <ngs-toolbar-spacer />\n <ngs-toolbar-nav>\n <a ngs-toolbar-nav-link [routerLink]=\"['/dashboard']\">Dashboard</a>\n </ngs-toolbar-nav>\n</ngs-toolbar>"
10323
10327
  }
10324
10328
  ],
10325
10329
  "previewAsset": "projects/components/toolbar/preview.svg",
@@ -10343,10 +10347,12 @@
10343
10347
  "ToolbarRow",
10344
10348
  "ToolbarSpacer",
10345
10349
  "ToolbarSubtitle",
10346
- "ToolbarTitle"
10350
+ "ToolbarTitle",
10351
+ "ToolbarTitleAppearance"
10347
10352
  ],
10348
10353
  "inputs": [
10349
10354
  "active",
10355
+ "appearance",
10350
10356
  "hidden"
10351
10357
  ],
10352
10358
  "outputs": [],
@@ -10361,6 +10367,7 @@
10361
10367
  "--ngs-nav-item-hover-color",
10362
10368
  "--ngs-nav-item-padding",
10363
10369
  "--ngs-nav-item-radius",
10370
+ "--ngs-toolbar-gap",
10364
10371
  "--ngs-toolbar-nav-link-active-color",
10365
10372
  "--ngs-toolbar-nav-link-color",
10366
10373
  "--ngs-toolbar-nav-link-font-size",
@@ -10370,7 +10377,9 @@
10370
10377
  "--ngs-toolbar-nav-link-radius",
10371
10378
  "--ngs-toolbar-subtitle-color",
10372
10379
  "--ngs-toolbar-subtitle-font-size",
10373
- "--ngs-toolbar-subtitle-weight"
10380
+ "--ngs-toolbar-subtitle-weight",
10381
+ "--ngs-toolbar-title-font-size",
10382
+ "--ngs-toolbar-title-font-weight"
10374
10383
  ],
10375
10384
  "example": null
10376
10385
  },