duck-dev-lib 0.0.74 → 0.0.76
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.
- package/fesm2022/{duck-dev-lib-en-HnIDQoqi.mjs → duck-dev-lib-en-XYugblp4.mjs} +88 -5
- package/fesm2022/{duck-dev-lib-ru-CsxjiQCC.mjs.map → duck-dev-lib-en-XYugblp4.mjs.map} +1 -1
- package/fesm2022/{duck-dev-lib-ru-CsxjiQCC.mjs → duck-dev-lib-ru-BBQhEnLr.mjs} +88 -5
- package/fesm2022/{duck-dev-lib-en-HnIDQoqi.mjs.map → duck-dev-lib-ru-BBQhEnLr.mjs.map} +1 -1
- package/fesm2022/duck-dev-lib.mjs +506 -16
- package/fesm2022/duck-dev-lib.mjs.map +1 -1
- package/package.json +1 -1
- package/types/duck-dev-lib.d.ts +111 -2
|
@@ -5788,6 +5788,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
|
|
|
5788
5788
|
|
|
5789
5789
|
class QuickStartBlock {
|
|
5790
5790
|
t = inject(TranslocoService);
|
|
5791
|
+
doc = inject(DOCUMENT);
|
|
5791
5792
|
colorViolet = AccentEnumColor.Violet;
|
|
5792
5793
|
colorOrange = AccentEnumColor.Orange;
|
|
5793
5794
|
colorWhite = AccentEnumColor.White;
|
|
@@ -5801,8 +5802,20 @@ class QuickStartBlock {
|
|
|
5801
5802
|
onPreviewTabChange(tab) {
|
|
5802
5803
|
this.activePreviewTab.set(tab);
|
|
5803
5804
|
}
|
|
5805
|
+
downloadDocs() {
|
|
5806
|
+
fetch('docs/NEOBRUTALISM.md')
|
|
5807
|
+
.then((res) => res.blob())
|
|
5808
|
+
.then((blob) => {
|
|
5809
|
+
const url = URL.createObjectURL(blob);
|
|
5810
|
+
const a = this.doc.createElement('a');
|
|
5811
|
+
a.href = url;
|
|
5812
|
+
a.download = 'NEOBRUTALISM.md';
|
|
5813
|
+
a.click();
|
|
5814
|
+
URL.revokeObjectURL(url);
|
|
5815
|
+
});
|
|
5816
|
+
}
|
|
5804
5817
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: QuickStartBlock, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5805
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: QuickStartBlock, isStandalone: true, selector: "app-quick-start-block", ngImport: i0, template: "<div class=\"quick-start\">\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 HERO \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <header class=\"hero\">\n <div class=\"hero__badges\">\n <dd-badge [text]=\"'Angular 21'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'sm'\" />\n <dd-badge [text]=\"'Signals'\" [color]=\"colorOrange\" [variant]=\"'soft'\" [size]=\"'sm'\" />\n <dd-badge [text]=\"'Standalone'\" [color]=\"colorGray\" [variant]=\"'outline'\" [size]=\"'sm'\" />\n </div>\n <h1>{{ 'quickStart.hero.title' | transloco }}</h1>\n <p class=\"hero__subtitle\">{{ 'quickStart.hero.subtitle' | transloco }}</p>\n </header>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 1 \u2014 INSTALL \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'01'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.install.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <dd-card-signal [color]=\"colorViolet\">\n <small>{{ 'quickStart.install.eyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.install.cardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.install.cardText' | transloco }}</p>\n </dd-card-signal>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">angular.json</div>\n <pre><code>\"styles\": [\n \"node_modules/duck-dev-lib/styles/variables.scss\",\n \"src/styles.scss\"\n]</code></pre>\n </div>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">app.config.ts</div>\n <pre><code>import {{ '{' }} provideTransloco {{ '}' }} from '@jsverse/transloco';\n\nexport const appConfig = {{ '{' }}\n providers: [\n provideTransloco({{ '{' }}\n config: {{ '{' }} availableLangs: ['en', 'ru'], defaultLang: 'en' {{ '}' }}\n {{ '}' }})\n ]\n{{ '}' }};</code></pre>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 2 \u2014 PALETTE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'02'\" [color]=\"colorOrange\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.palette.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.palette.description' | transloco }}</p>\n\n <div class=\"palette-grid\">\n <div class=\"palette-group\">\n <h3>{{ 'quickStart.palette.neutralsTitle' | transloco }}</h3>\n <div class=\"swatch-row\">\n <div class=\"swatch\" style=\"background: var(--dd-base-0)\">\n <span class=\"swatch__label\">0</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-100)\">\n <span class=\"swatch__label\">100</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-200)\">\n <span class=\"swatch__label\">200</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-300)\">\n <span class=\"swatch__label\">300</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-400)\">\n <span class=\"swatch__label swatch__label--light\">400</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-500)\">\n <span class=\"swatch__label swatch__label--light\">500</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-600)\">\n <span class=\"swatch__label swatch__label--light\">600</span>\n </div>\n </div>\n </div>\n\n <div class=\"palette-group\">\n <h3>{{ 'quickStart.palette.accentsTitle' | transloco }}</h3>\n <div class=\"swatch-row\">\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-secondary)\">\n <span class=\"swatch__label swatch__label--light\">secondary</span>\n </div>\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-accent-orange)\">\n <span class=\"swatch__label swatch__label--light\">orange</span>\n </div>\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-accent-blue)\">\n <span class=\"swatch__label swatch__label--light\">blue</span>\n </div>\n </div>\n </div>\n </div>\n\n <dd-speaker-bubble-soft [color]=\"colorViolet\" [tail]=\"'left'\">\n <p>\n <strong>{{ 'quickStart.palette.tipTitle' | transloco }}</strong>\n {{ 'quickStart.palette.tipText' | transloco }}\n </p>\n </dd-speaker-bubble-soft>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 3 \u2014 THEMES \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'03'\" [color]=\"colorGray\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.themes.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <div class=\"theme-cards\">\n <dd-card-minimal [color]=\"colorWhite\">\n <small>{{ 'quickStart.themes.lightEyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.themes.lightTitle' | transloco }}</h3>\n <p>{{ 'quickStart.themes.lightText' | transloco }}</p>\n </dd-card-minimal>\n <dd-card-minimal [color]=\"colorDark\">\n <small>{{ 'quickStart.themes.darkEyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.themes.darkTitle' | transloco }}</h3>\n <p>{{ 'quickStart.themes.darkText' | transloco }}</p>\n </dd-card-minimal>\n </div>\n\n <ng-template #themeHtmlSnippet>\n <pre class=\"accordion-code\"><code><html ddTheme=\"dark\">\n <body>\n <app-root></app-root>\n </body>\n</html></code></pre>\n </ng-template>\n\n <ng-template #themeToggleSnippet>\n <pre class=\"accordion-code\"><code>setTheme(theme: 'dark' | 'light') {{ '{' }}\n document.documentElement\n .setAttribute('ddTheme', theme);\n{{ '}' }}</code></pre>\n </ng-template>\n\n <div class=\"accordion-row\">\n <duck-dev-accordion\n [title]=\"'quickStart.themes.htmlAccordionTitle' | transloco\"\n [content]=\"themeHtmlSnippet\"\n />\n <duck-dev-accordion\n [title]=\"'quickStart.themes.toggleAccordionTitle' | transloco\"\n [content]=\"themeToggleSnippet\"\n [color]=\"colorViolet\"\n />\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 4 \u2014 CUSTOM THEME \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'04'\" [color]=\"colorDark\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.custom.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <dd-card-outline [color]=\"colorOrange\">\n <small>{{ 'quickStart.custom.eyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.custom.cardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.custom.cardText' | transloco }}</p>\n </dd-card-outline>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">styles.scss</div>\n <pre><code>[ddTheme='brand'] {{ '{' }}\n --dd-base-0: #ffffff;\n --dd-base-100: #f4f6ff;\n --dd-base-300: #dbe0ff;\n --dd-base-600: #0e1028;\n --dd-base-secondary: #6829ff;\n --dd-base-accent-orange: #fe7b20;\n --dd-base-accent-blue: #3254f3;\n{{ '}' }}</code></pre>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 5 \u2014 COLORS IN COMPONENTS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'05'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.colors.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.colors.description' | transloco }}</p>\n\n <div class=\"code-block code-block--compact\">\n <div class=\"code-block__label\">AccentEnumColor</div>\n <pre><code>import {{ '{' }} AccentEnumColor {{ '}' }} from 'duck-dev-lib';\n\n// Violet \u00B7 Orange \u00B7 White \u00B7 Gray \u00B7 Dark</code></pre>\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.progressTitle' | transloco }}</h3>\n <div class=\"progress-showcase\">\n <duck-dev-progress-line [label]=\"'Violet'\" [value]=\"85\" [color]=\"colorViolet\" />\n <duck-dev-progress-line [label]=\"'Orange'\" [value]=\"60\" [color]=\"colorOrange\" />\n <duck-dev-progress-line [label]=\"'Gray'\" [value]=\"40\" [color]=\"colorGray\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.buttonsTitle' | transloco }}</h3>\n <div class=\"buttons-showcase\">\n <duck-dev-button-casper [text]=\"'Casper'\" [colorButton]=\"colorViolet\" />\n <duck-dev-button-glide-over textButton=\"Glide Over\" [colorButton]=\"colorOrange\" />\n <duck-dev-button-flip [text]=\"'Flip'\" [colorButton]=\"colorDark\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.badgesTitle' | transloco }}</h3>\n <div class=\"badges-showcase\">\n <dd-badge [text]=\"'Solid'\" [color]=\"colorViolet\" [variant]=\"'solid'\" />\n <dd-badge [text]=\"'Soft'\" [color]=\"colorOrange\" [variant]=\"'soft'\" />\n <dd-badge [text]=\"'Outline'\" [color]=\"colorGray\" [variant]=\"'outline'\" />\n <dd-badge [text]=\"'Dark'\" [color]=\"colorDark\" [variant]=\"'solid'\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.cardsTitle' | transloco }}</h3>\n <div class=\"cards-showcase\">\n <dd-card-accent [color]=\"colorViolet\">\n <div>{{ 'quickStart.colors.cardViolet' | transloco }}</div>\n </dd-card-accent>\n <dd-card-accent [color]=\"colorOrange\">\n <div>{{ 'quickStart.colors.cardOrange' | transloco }}</div>\n </dd-card-accent>\n <dd-card-accent [color]=\"colorDark\">\n <div>{{ 'quickStart.colors.cardDark' | transloco }}</div>\n </dd-card-accent>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 6 \u2014 TWO STYLES \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'06'\" [color]=\"colorOrange\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.styles.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.styles.description' | transloco }}</p>\n\n <duck-dev-tab [tabs]=\"previewTabs\" (tabChange)=\"onPreviewTabChange($event)\">\n @if (activePreviewTab().id === 'classic') {\n <div class=\"style-preview\">\n <div class=\"style-preview__row\">\n <duck-dev-button-casper [text]=\"'Casper'\" [colorButton]=\"colorViolet\" />\n <duck-dev-button-glide-over textButton=\"Glide Over\" [colorButton]=\"colorOrange\" />\n <duck-dev-button-flip [text]=\"'Flip'\" [colorButton]=\"colorDark\" />\n </div>\n <div class=\"style-preview__row\">\n <dd-badge [text]=\"'Status'\" [color]=\"colorViolet\" [variant]=\"'solid'\" />\n <dd-badge [text]=\"'Label'\" [color]=\"colorOrange\" [variant]=\"'soft'\" />\n <dd-badge [text]=\"'Tag'\" [color]=\"colorGray\" [variant]=\"'outline'\" />\n </div>\n <duck-dev-progress-line [label]=\"'Progress'\" [value]=\"72\" [color]=\"colorViolet\" />\n <div class=\"style-preview__cards\">\n <dd-card-minimal [color]=\"colorViolet\">\n <small>Classic</small>\n <h3>{{ 'quickStart.styles.classicCardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.styles.classicCardText' | transloco }}</p>\n </dd-card-minimal>\n <dd-card-signal [color]=\"colorOrange\">\n <small>Signal</small>\n <h3>{{ 'quickStart.styles.signalCardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.styles.signalCardText' | transloco }}</p>\n </dd-card-signal>\n </div>\n </div>\n }\n @if (activePreviewTab().id === 'neobrutalism') {\n <div class=\"style-preview\">\n <div class=\"style-preview__row\">\n <duck-dev-button-neobrutal-slab\n [text]=\"'Slab'\"\n [helperText]=\"'click me'\"\n [colorButton]=\"colorViolet\"\n />\n <duck-dev-button-neobrutal-slab\n [text]=\"'Action'\"\n [helperText]=\"'do it'\"\n [colorButton]=\"colorOrange\"\n />\n </div>\n <dd-speaker-bubble-soft [color]=\"colorOrange\" [tail]=\"'right'\">\n <p>\n <strong>Neobrutalism</strong> \u2014\n {{ 'quickStart.styles.neobrutalBubbleText' | transloco }}\n </p>\n </dd-speaker-bubble-soft>\n </div>\n }\n </duck-dev-tab>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 7 \u2014 USAGE EXAMPLE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'07'\" [color]=\"colorGray\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.usage.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <ng-template #usageTemplate>\n <pre class=\"accordion-code\"><code><duck-dev-button-casper\n [text]=\"'Click me'\"\n [colorButton]=\"colorViolet\"\n/>\n\n<dd-badge\n [text]=\"'New'\"\n [color]=\"colorOrange\"\n [variant]=\"'solid'\"\n/>\n\n<dd-card-minimal [color]=\"colorViolet\">\n <h3>Title</h3>\n <p>Content goes here</p>\n</dd-card-minimal></code></pre>\n </ng-template>\n\n <ng-template #usageComponent>\n <pre\n class=\"accordion-code\"\n ><code>import {{ '{' }} Component {{ '}' }} from '@angular/core';\nimport {{ '{' }} ButtonCasper {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} Badge {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} DuckDevCardMinimal {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} AccentEnumColor {{ '}' }} from 'duck-dev-lib';\n\n@Component({{ '{' }}\n selector: 'app-example',\n standalone: true,\n imports: [ButtonCasper, Badge, DuckDevCardMinimal],\n templateUrl: './example.html',\n{{ '}' }})\nexport class ExampleComponent {{ '{' }}\n colorViolet = AccentEnumColor.Violet;\n colorOrange = AccentEnumColor.Orange;\n{{ '}' }}</code></pre>\n </ng-template>\n\n <div class=\"accordion-row\">\n <duck-dev-accordion\n [title]=\"'quickStart.usage.templateTitle' | transloco\"\n [content]=\"usageTemplate\"\n [color]=\"colorOrange\"\n />\n <duck-dev-accordion\n [title]=\"'quickStart.usage.componentTitle' | transloco\"\n [content]=\"usageComponent\"\n [color]=\"colorViolet\"\n />\n </div>\n\n <dd-speaker-bubble-soft [color]=\"colorGray\" [tail]=\"'left'\">\n <p>{{ 'quickStart.usage.tip' | transloco }}</p>\n </dd-speaker-bubble-soft>\n </dd-card-section>\n </section>\n</div>\n", styles: [".quick-start{max-width:960px;margin:0 auto;padding:48px 24px 80px;display:flex;flex-direction:column;gap:56px}.hero{text-align:center;padding:40px 0 16px}.hero__badges{display:flex;justify-content:center;gap:10px;margin-bottom:24px}.hero h1{font-size:42px;font-weight:800;color:var(--dd-base-600);line-height:1.15;margin:0 0 16px;letter-spacing:-.02em}.hero__subtitle{font-size:18px;color:var(--dd-base-400);line-height:1.6;max-width:600px;margin:0 auto}.step__header{display:flex;align-items:center;gap:14px;margin-bottom:20px}.step__header h2{font-size:26px;font-weight:700;color:var(--dd-base-600);margin:0}.section-description{font-size:16px;line-height:1.65;color:var(--dd-base-400);margin:0 0 28px}.code-block{margin:20px 0;border-radius:10px;overflow:hidden;border:1px solid var(--dd-base-300)}.code-block__label{padding:8px 16px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--dd-base-300);background:var(--dd-base-600);border-bottom:1px solid var(--dd-base-500)}.code-block pre{margin:0;padding:20px;background:var(--dd-base-600);overflow-x:auto}.code-block pre code{font-family:JetBrains Mono,Fira Code,Courier New,monospace;font-size:13px;line-height:1.7;color:var(--dd-base-100)}.code-block--compact{margin:0 0 28px}.accordion-code{margin:0;padding:20px;background:var(--dd-base-600);border-radius:8px;overflow-x:auto}.accordion-code code{font-family:JetBrains Mono,Fira Code,Courier New,monospace;font-size:13px;line-height:1.7;color:var(--dd-base-100)}.palette-grid{display:flex;flex-direction:column;gap:28px;margin-bottom:32px}.palette-group h3{font-size:14px;font-weight:600;color:var(--dd-base-500);text-transform:uppercase;letter-spacing:.06em;margin:0 0 12px}.swatch-row{display:flex;gap:6px;flex-wrap:wrap}.swatch{flex:1;min-width:60px;height:64px;border-radius:10px;border:1px solid var(--dd-base-300);display:flex;align-items:flex-end;justify-content:center;padding-bottom:8px;transition:transform .2s ease,box-shadow .2s ease}.swatch:hover{transform:translateY(-3px);box-shadow:0 6px 20px -8px var(--dd-base-300)}.swatch__label{font-size:11px;font-weight:600;color:var(--dd-base-500)}.swatch__label--light{color:var(--dd-base-0)}.swatch--accent{min-width:100px;height:72px}.theme-cards{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:28px}.accordion-row{display:flex;flex-direction:column;gap:12px;margin-top:20px}.showcase-title{font-size:15px;font-weight:600;color:var(--dd-base-500);text-transform:uppercase;letter-spacing:.04em;margin:32px 0 16px}.progress-showcase{display:flex;flex-direction:column;gap:16px}.buttons-showcase{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.badges-showcase{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.cards-showcase{display:flex;flex-direction:column;gap:12px}.style-preview{display:flex;flex-direction:column;gap:24px;padding:8px 0}.style-preview__row{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.style-preview__cards{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media(max-width:768px){.quick-start{padding:24px 16px 60px;gap:40px}.hero h1{font-size:30px}.hero__subtitle{font-size:16px}.step__header h2{font-size:22px}.theme-cards{grid-template-columns:1fr}.swatch{min-width:40px;height:52px}.swatch--accent{min-width:70px}.style-preview__cards{grid-template-columns:1fr}}@media(max-width:480px){.hero h1{font-size:26px}.buttons-showcase{flex-direction:column;align-items:flex-start}}\n"], dependencies: [{ kind: "component", type: DuckDevCardAccent, selector: "dd-card-accent", inputs: ["color"] }, { kind: "component", type: DuckDevCardSection, selector: "dd-card-section" }, { kind: "component", type: DuckDevCardMinimal, selector: "dd-card-minimal", inputs: ["color"] }, { kind: "component", type: DuckDevCardSignal, selector: "dd-card-signal", inputs: ["color"] }, { kind: "component", type: DuckDevCardOutline, selector: "dd-card-outline", inputs: ["color"] }, { kind: "component", type: DuckDevAccordionComponent, selector: "duck-dev-accordion", inputs: ["content", "title", "color"] }, { kind: "component", type: ButtonCasper, selector: "duck-dev-button-casper", inputs: ["isDisabled", "text", "colorButton"] }, { kind: "component", type: ButtonGlideOver, selector: "duck-dev-button-glide-over", inputs: ["textButton", "colorButton", "padding"] }, { kind: "component", type: ButtonFlip, selector: "duck-dev-button-flip", inputs: ["text", "disabled", "arrowIndex", "direction", "colorButton"] }, { kind: "component", type: ButtonNeobrutalSlab, selector: "duck-dev-button-neobrutal-slab", inputs: ["text", "helperText", "isDisabled", "colorButton"] }, { kind: "component", type: Badge, selector: "dd-badge", inputs: ["text", "color", "variant", "size"] }, { kind: "component", type: DuckDevProgressLine, selector: "duck-dev-progress-line", inputs: ["label", "value", "subtext", "color"] }, { kind: "component", type: DuckDevSpeakerBubbleSoft, selector: "dd-speaker-bubble-soft", inputs: ["color", "tail", "tailPosition", "target"] }, { kind: "component", type: DuckDevTab, selector: "duck-dev-tab", inputs: ["tabs"], outputs: ["tabChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5818
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: QuickStartBlock, isStandalone: true, selector: "app-quick-start-block", ngImport: i0, template: "<div class=\"quick-start\">\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 HERO \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <header class=\"hero\">\n <div class=\"hero__badges\">\n <dd-badge [text]=\"'Angular 21'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'sm'\" />\n <dd-badge [text]=\"'Signals'\" [color]=\"colorOrange\" [variant]=\"'soft'\" [size]=\"'sm'\" />\n <dd-badge [text]=\"'Standalone'\" [color]=\"colorGray\" [variant]=\"'outline'\" [size]=\"'sm'\" />\n </div>\n <h1>{{ 'quickStart.hero.title' | transloco }}</h1>\n <p class=\"hero__subtitle\">{{ 'quickStart.hero.subtitle' | transloco }}</p>\n </header>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 1 \u2014 INSTALL \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'01'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.install.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <dd-card-signal [color]=\"colorViolet\">\n <small>{{ 'quickStart.install.eyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.install.cardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.install.cardText' | transloco }}</p>\n </dd-card-signal>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">angular.json</div>\n <pre><code>\"styles\": [\n \"node_modules/duck-dev-lib/styles/variables.scss\",\n \"src/styles.scss\"\n]</code></pre>\n </div>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">app.config.ts</div>\n <pre><code>import {{ '{' }} provideTransloco {{ '}' }} from '@jsverse/transloco';\n\nexport const appConfig = {{ '{' }}\n providers: [\n provideTransloco({{ '{' }}\n config: {{ '{' }} availableLangs: ['en', 'ru'], defaultLang: 'en' {{ '}' }}\n {{ '}' }})\n ]\n{{ '}' }};</code></pre>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 2 \u2014 PALETTE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'02'\" [color]=\"colorOrange\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.palette.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.palette.description' | transloco }}</p>\n\n <div class=\"palette-grid\">\n <div class=\"palette-group\">\n <h3>{{ 'quickStart.palette.neutralsTitle' | transloco }}</h3>\n <div class=\"swatch-row\">\n <div class=\"swatch\" style=\"background: var(--dd-base-0)\">\n <span class=\"swatch__label\">0</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-100)\">\n <span class=\"swatch__label\">100</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-200)\">\n <span class=\"swatch__label\">200</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-300)\">\n <span class=\"swatch__label\">300</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-400)\">\n <span class=\"swatch__label swatch__label--light\">400</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-500)\">\n <span class=\"swatch__label swatch__label--light\">500</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-600)\">\n <span class=\"swatch__label swatch__label--light\">600</span>\n </div>\n </div>\n </div>\n\n <div class=\"palette-group\">\n <h3>{{ 'quickStart.palette.accentsTitle' | transloco }}</h3>\n <div class=\"swatch-row\">\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-secondary)\">\n <span class=\"swatch__label swatch__label--light\">secondary</span>\n </div>\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-accent-orange)\">\n <span class=\"swatch__label swatch__label--light\">orange</span>\n </div>\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-accent-blue)\">\n <span class=\"swatch__label swatch__label--light\">blue</span>\n </div>\n </div>\n </div>\n </div>\n\n <dd-speaker-bubble-soft [color]=\"colorViolet\" [tail]=\"'left'\">\n <p>\n <strong>{{ 'quickStart.palette.tipTitle' | transloco }}</strong>\n {{ 'quickStart.palette.tipText' | transloco }}\n </p>\n </dd-speaker-bubble-soft>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 3 \u2014 THEMES \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'03'\" [color]=\"colorGray\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.themes.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <div class=\"theme-cards\">\n <dd-card-minimal [color]=\"colorWhite\">\n <small>{{ 'quickStart.themes.lightEyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.themes.lightTitle' | transloco }}</h3>\n <p>{{ 'quickStart.themes.lightText' | transloco }}</p>\n </dd-card-minimal>\n <dd-card-minimal [color]=\"colorDark\">\n <small>{{ 'quickStart.themes.darkEyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.themes.darkTitle' | transloco }}</h3>\n <p>{{ 'quickStart.themes.darkText' | transloco }}</p>\n </dd-card-minimal>\n </div>\n\n <ng-template #themeHtmlSnippet>\n <pre class=\"accordion-code\"><code><html ddTheme=\"dark\">\n <body>\n <app-root></app-root>\n </body>\n</html></code></pre>\n </ng-template>\n\n <ng-template #themeToggleSnippet>\n <pre class=\"accordion-code\"><code>setTheme(theme: 'dark' | 'light') {{ '{' }}\n document.documentElement\n .setAttribute('ddTheme', theme);\n{{ '}' }}</code></pre>\n </ng-template>\n\n <div class=\"accordion-row\">\n <duck-dev-accordion\n [title]=\"'quickStart.themes.htmlAccordionTitle' | transloco\"\n [content]=\"themeHtmlSnippet\"\n />\n <duck-dev-accordion\n [title]=\"'quickStart.themes.toggleAccordionTitle' | transloco\"\n [content]=\"themeToggleSnippet\"\n [color]=\"colorViolet\"\n />\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 4 \u2014 CUSTOM THEME \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'04'\" [color]=\"colorDark\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.custom.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <dd-card-outline [color]=\"colorOrange\">\n <small>{{ 'quickStart.custom.eyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.custom.cardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.custom.cardText' | transloco }}</p>\n </dd-card-outline>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">styles.scss</div>\n <pre><code>[ddTheme='brand'] {{ '{' }}\n --dd-base-0: #ffffff;\n --dd-base-100: #f4f6ff;\n --dd-base-300: #dbe0ff;\n --dd-base-600: #0e1028;\n --dd-base-secondary: #6829ff;\n --dd-base-accent-orange: #fe7b20;\n --dd-base-accent-blue: #3254f3;\n{{ '}' }}</code></pre>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 5 \u2014 COLORS IN COMPONENTS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'05'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.colors.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.colors.description' | transloco }}</p>\n\n <div class=\"code-block code-block--compact\">\n <div class=\"code-block__label\">AccentEnumColor</div>\n <pre><code>import {{ '{' }} AccentEnumColor {{ '}' }} from 'duck-dev-lib';\n\n// Violet \u00B7 Orange \u00B7 White \u00B7 Gray \u00B7 Dark</code></pre>\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.progressTitle' | transloco }}</h3>\n <div class=\"progress-showcase\">\n <duck-dev-progress-line [label]=\"'Violet'\" [value]=\"85\" [color]=\"colorViolet\" />\n <duck-dev-progress-line [label]=\"'Orange'\" [value]=\"60\" [color]=\"colorOrange\" />\n <duck-dev-progress-line [label]=\"'Gray'\" [value]=\"40\" [color]=\"colorGray\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.buttonsTitle' | transloco }}</h3>\n <div class=\"buttons-showcase\">\n <duck-dev-button-casper [text]=\"'Casper'\" [colorButton]=\"colorViolet\" />\n <duck-dev-button-glide-over textButton=\"Glide Over\" [colorButton]=\"colorOrange\" />\n <duck-dev-button-flip [text]=\"'Flip'\" [colorButton]=\"colorDark\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.badgesTitle' | transloco }}</h3>\n <div class=\"badges-showcase\">\n <dd-badge [text]=\"'Solid'\" [color]=\"colorViolet\" [variant]=\"'solid'\" />\n <dd-badge [text]=\"'Soft'\" [color]=\"colorOrange\" [variant]=\"'soft'\" />\n <dd-badge [text]=\"'Outline'\" [color]=\"colorGray\" [variant]=\"'outline'\" />\n <dd-badge [text]=\"'Dark'\" [color]=\"colorDark\" [variant]=\"'solid'\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.cardsTitle' | transloco }}</h3>\n <div class=\"cards-showcase\">\n <dd-card-accent [color]=\"colorViolet\">\n <div>{{ 'quickStart.colors.cardViolet' | transloco }}</div>\n </dd-card-accent>\n <dd-card-accent [color]=\"colorOrange\">\n <div>{{ 'quickStart.colors.cardOrange' | transloco }}</div>\n </dd-card-accent>\n <dd-card-accent [color]=\"colorDark\">\n <div>{{ 'quickStart.colors.cardDark' | transloco }}</div>\n </dd-card-accent>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 6 \u2014 TWO STYLES \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'06'\" [color]=\"colorOrange\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.styles.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.styles.description' | transloco }}</p>\n\n <duck-dev-tab [tabs]=\"previewTabs\" (tabChange)=\"onPreviewTabChange($event)\">\n @if (activePreviewTab().id === 'classic') {\n <div class=\"style-preview\">\n <div class=\"style-preview__row\">\n <duck-dev-button-casper [text]=\"'Casper'\" [colorButton]=\"colorViolet\" />\n <duck-dev-button-glide-over textButton=\"Glide Over\" [colorButton]=\"colorOrange\" />\n <duck-dev-button-flip [text]=\"'Flip'\" [colorButton]=\"colorDark\" />\n </div>\n <div class=\"style-preview__row\">\n <dd-badge [text]=\"'Status'\" [color]=\"colorViolet\" [variant]=\"'solid'\" />\n <dd-badge [text]=\"'Label'\" [color]=\"colorOrange\" [variant]=\"'soft'\" />\n <dd-badge [text]=\"'Tag'\" [color]=\"colorGray\" [variant]=\"'outline'\" />\n </div>\n <duck-dev-progress-line [label]=\"'Progress'\" [value]=\"72\" [color]=\"colorViolet\" />\n <div class=\"style-preview__cards\">\n <dd-card-minimal [color]=\"colorViolet\">\n <small>Classic</small>\n <h3>{{ 'quickStart.styles.classicCardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.styles.classicCardText' | transloco }}</p>\n </dd-card-minimal>\n <dd-card-signal [color]=\"colorOrange\">\n <small>Signal</small>\n <h3>{{ 'quickStart.styles.signalCardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.styles.signalCardText' | transloco }}</p>\n </dd-card-signal>\n </div>\n </div>\n }\n @if (activePreviewTab().id === 'neobrutalism') {\n <div class=\"style-preview\">\n <div class=\"style-preview__row\">\n <duck-dev-button-neobrutal-slab\n [text]=\"'Slab'\"\n [helperText]=\"'click me'\"\n [colorButton]=\"colorViolet\"\n />\n <duck-dev-button-neobrutal-slab\n [text]=\"'Action'\"\n [helperText]=\"'do it'\"\n [colorButton]=\"colorOrange\"\n />\n </div>\n <dd-speaker-bubble-soft [color]=\"colorOrange\" [tail]=\"'right'\">\n <p>\n <strong>Neobrutalism</strong> \u2014\n {{ 'quickStart.styles.neobrutalBubbleText' | transloco }}\n </p>\n </dd-speaker-bubble-soft>\n </div>\n }\n </duck-dev-tab>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 7 \u2014 USAGE EXAMPLE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'07'\" [color]=\"colorGray\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.usage.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <ng-template #usageTemplate>\n <pre class=\"accordion-code\"><code><duck-dev-button-casper\n [text]=\"'Click me'\"\n [colorButton]=\"colorViolet\"\n/>\n\n<dd-badge\n [text]=\"'New'\"\n [color]=\"colorOrange\"\n [variant]=\"'solid'\"\n/>\n\n<dd-card-minimal [color]=\"colorViolet\">\n <h3>Title</h3>\n <p>Content goes here</p>\n</dd-card-minimal></code></pre>\n </ng-template>\n\n <ng-template #usageComponent>\n <pre\n class=\"accordion-code\"\n ><code>import {{ '{' }} Component {{ '}' }} from '@angular/core';\nimport {{ '{' }} ButtonCasper {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} Badge {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} DuckDevCardMinimal {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} AccentEnumColor {{ '}' }} from 'duck-dev-lib';\n\n@Component({{ '{' }}\n selector: 'app-example',\n standalone: true,\n imports: [ButtonCasper, Badge, DuckDevCardMinimal],\n templateUrl: './example.html',\n{{ '}' }})\nexport class ExampleComponent {{ '{' }}\n colorViolet = AccentEnumColor.Violet;\n colorOrange = AccentEnumColor.Orange;\n{{ '}' }}</code></pre>\n </ng-template>\n\n <div class=\"accordion-row\">\n <duck-dev-accordion\n [title]=\"'quickStart.usage.templateTitle' | transloco\"\n [content]=\"usageTemplate\"\n [color]=\"colorOrange\"\n />\n <duck-dev-accordion\n [title]=\"'quickStart.usage.componentTitle' | transloco\"\n [content]=\"usageComponent\"\n [color]=\"colorViolet\"\n />\n </div>\n\n <dd-speaker-bubble-soft [color]=\"colorGray\" [tail]=\"'left'\">\n <p>{{ 'quickStart.usage.tip' | transloco }}</p>\n </dd-speaker-bubble-soft>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 8 \u2014 DOWNLOAD DOCS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'08'\" [color]=\"colorDark\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.download.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.download.description' | transloco }}</p>\n\n <div class=\"download-block\">\n <duck-dev-button-neobrutal-slab\n [text]=\"'quickStart.download.button' | transloco\"\n [helperText]=\"'quickStart.download.helper' | transloco\"\n [colorButton]=\"colorViolet\"\n (click)=\"downloadDocs()\"\n />\n </div>\n </dd-card-section>\n </section>\n</div>\n", styles: [".quick-start{max-width:960px;margin:0 auto;padding:48px 24px 80px;display:flex;flex-direction:column;gap:56px}.hero{text-align:center;padding:40px 0 16px}.hero__badges{display:flex;justify-content:center;gap:10px;margin-bottom:24px}.hero h1{font-size:42px;font-weight:800;color:var(--dd-base-600);line-height:1.15;margin:0 0 16px;letter-spacing:-.02em}.hero__subtitle{font-size:18px;color:var(--dd-base-400);line-height:1.6;max-width:600px;margin:0 auto}.step__header{display:flex;align-items:center;gap:14px;margin-bottom:20px}.step__header h2{font-size:26px;font-weight:700;color:var(--dd-base-600);margin:0}.section-description{font-size:16px;line-height:1.65;color:var(--dd-base-400);margin:0 0 28px}.code-block{margin:20px 0;border-radius:10px;overflow:hidden;border:1px solid var(--dd-base-300)}.code-block__label{padding:8px 16px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--dd-base-300);background:var(--dd-base-600);border-bottom:1px solid var(--dd-base-500)}.code-block pre{margin:0;padding:20px;background:var(--dd-base-600);overflow-x:auto}.code-block pre code{font-family:JetBrains Mono,Fira Code,Courier New,monospace;font-size:13px;line-height:1.7;color:var(--dd-base-100)}.code-block--compact{margin:0 0 28px}.accordion-code{margin:0;padding:20px;background:var(--dd-base-600);border-radius:8px;overflow-x:auto}.accordion-code code{font-family:JetBrains Mono,Fira Code,Courier New,monospace;font-size:13px;line-height:1.7;color:var(--dd-base-100)}.palette-grid{display:flex;flex-direction:column;gap:28px;margin-bottom:32px}.palette-group h3{font-size:14px;font-weight:600;color:var(--dd-base-500);text-transform:uppercase;letter-spacing:.06em;margin:0 0 12px}.swatch-row{display:flex;gap:6px;flex-wrap:wrap}.swatch{flex:1;min-width:60px;height:64px;border-radius:10px;border:1px solid var(--dd-base-300);display:flex;align-items:flex-end;justify-content:center;padding-bottom:8px;transition:transform .2s ease,box-shadow .2s ease}.swatch:hover{transform:translateY(-3px);box-shadow:0 6px 20px -8px var(--dd-base-300)}.swatch__label{font-size:11px;font-weight:600;color:var(--dd-base-500)}.swatch__label--light{color:var(--dd-base-0)}.swatch--accent{min-width:100px;height:72px}.theme-cards{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:28px}.accordion-row{display:flex;flex-direction:column;gap:12px;margin-top:20px}.showcase-title{font-size:15px;font-weight:600;color:var(--dd-base-500);text-transform:uppercase;letter-spacing:.04em;margin:32px 0 16px}.progress-showcase{display:flex;flex-direction:column;gap:16px}.buttons-showcase{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.badges-showcase{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.cards-showcase{display:flex;flex-direction:column;gap:12px}.download-block{display:flex;justify-content:center;padding:12px 0 4px}.style-preview{display:flex;flex-direction:column;gap:24px;padding:8px 0}.style-preview__row{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.style-preview__cards{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media(max-width:768px){.quick-start{padding:24px 16px 60px;gap:40px}.hero h1{font-size:30px}.hero__subtitle{font-size:16px}.step__header h2{font-size:22px}.theme-cards{grid-template-columns:1fr}.swatch{min-width:40px;height:52px}.swatch--accent{min-width:70px}.style-preview__cards{grid-template-columns:1fr}}@media(max-width:480px){.hero h1{font-size:26px}.buttons-showcase{flex-direction:column;align-items:flex-start}}\n"], dependencies: [{ kind: "component", type: DuckDevCardAccent, selector: "dd-card-accent", inputs: ["color"] }, { kind: "component", type: DuckDevCardSection, selector: "dd-card-section" }, { kind: "component", type: DuckDevCardMinimal, selector: "dd-card-minimal", inputs: ["color"] }, { kind: "component", type: DuckDevCardSignal, selector: "dd-card-signal", inputs: ["color"] }, { kind: "component", type: DuckDevCardOutline, selector: "dd-card-outline", inputs: ["color"] }, { kind: "component", type: DuckDevAccordionComponent, selector: "duck-dev-accordion", inputs: ["content", "title", "color"] }, { kind: "component", type: ButtonCasper, selector: "duck-dev-button-casper", inputs: ["isDisabled", "text", "colorButton"] }, { kind: "component", type: ButtonGlideOver, selector: "duck-dev-button-glide-over", inputs: ["textButton", "colorButton", "padding"] }, { kind: "component", type: ButtonFlip, selector: "duck-dev-button-flip", inputs: ["text", "disabled", "arrowIndex", "direction", "colorButton"] }, { kind: "component", type: ButtonNeobrutalSlab, selector: "duck-dev-button-neobrutal-slab", inputs: ["text", "helperText", "isDisabled", "colorButton"] }, { kind: "component", type: Badge, selector: "dd-badge", inputs: ["text", "color", "variant", "size"] }, { kind: "component", type: DuckDevProgressLine, selector: "duck-dev-progress-line", inputs: ["label", "value", "subtext", "color"] }, { kind: "component", type: DuckDevSpeakerBubbleSoft, selector: "dd-speaker-bubble-soft", inputs: ["color", "tail", "tailPosition", "target"] }, { kind: "component", type: DuckDevTab, selector: "duck-dev-tab", inputs: ["tabs"], outputs: ["tabChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
5806
5819
|
}
|
|
5807
5820
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: QuickStartBlock, decorators: [{
|
|
5808
5821
|
type: Component,
|
|
@@ -5822,7 +5835,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
|
|
|
5822
5835
|
DuckDevProgressLine,
|
|
5823
5836
|
DuckDevSpeakerBubbleSoft,
|
|
5824
5837
|
DuckDevTab,
|
|
5825
|
-
], template: "<div class=\"quick-start\">\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 HERO \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <header class=\"hero\">\n <div class=\"hero__badges\">\n <dd-badge [text]=\"'Angular 21'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'sm'\" />\n <dd-badge [text]=\"'Signals'\" [color]=\"colorOrange\" [variant]=\"'soft'\" [size]=\"'sm'\" />\n <dd-badge [text]=\"'Standalone'\" [color]=\"colorGray\" [variant]=\"'outline'\" [size]=\"'sm'\" />\n </div>\n <h1>{{ 'quickStart.hero.title' | transloco }}</h1>\n <p class=\"hero__subtitle\">{{ 'quickStart.hero.subtitle' | transloco }}</p>\n </header>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 1 \u2014 INSTALL \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'01'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.install.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <dd-card-signal [color]=\"colorViolet\">\n <small>{{ 'quickStart.install.eyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.install.cardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.install.cardText' | transloco }}</p>\n </dd-card-signal>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">angular.json</div>\n <pre><code>\"styles\": [\n \"node_modules/duck-dev-lib/styles/variables.scss\",\n \"src/styles.scss\"\n]</code></pre>\n </div>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">app.config.ts</div>\n <pre><code>import {{ '{' }} provideTransloco {{ '}' }} from '@jsverse/transloco';\n\nexport const appConfig = {{ '{' }}\n providers: [\n provideTransloco({{ '{' }}\n config: {{ '{' }} availableLangs: ['en', 'ru'], defaultLang: 'en' {{ '}' }}\n {{ '}' }})\n ]\n{{ '}' }};</code></pre>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 2 \u2014 PALETTE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'02'\" [color]=\"colorOrange\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.palette.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.palette.description' | transloco }}</p>\n\n <div class=\"palette-grid\">\n <div class=\"palette-group\">\n <h3>{{ 'quickStart.palette.neutralsTitle' | transloco }}</h3>\n <div class=\"swatch-row\">\n <div class=\"swatch\" style=\"background: var(--dd-base-0)\">\n <span class=\"swatch__label\">0</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-100)\">\n <span class=\"swatch__label\">100</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-200)\">\n <span class=\"swatch__label\">200</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-300)\">\n <span class=\"swatch__label\">300</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-400)\">\n <span class=\"swatch__label swatch__label--light\">400</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-500)\">\n <span class=\"swatch__label swatch__label--light\">500</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-600)\">\n <span class=\"swatch__label swatch__label--light\">600</span>\n </div>\n </div>\n </div>\n\n <div class=\"palette-group\">\n <h3>{{ 'quickStart.palette.accentsTitle' | transloco }}</h3>\n <div class=\"swatch-row\">\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-secondary)\">\n <span class=\"swatch__label swatch__label--light\">secondary</span>\n </div>\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-accent-orange)\">\n <span class=\"swatch__label swatch__label--light\">orange</span>\n </div>\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-accent-blue)\">\n <span class=\"swatch__label swatch__label--light\">blue</span>\n </div>\n </div>\n </div>\n </div>\n\n <dd-speaker-bubble-soft [color]=\"colorViolet\" [tail]=\"'left'\">\n <p>\n <strong>{{ 'quickStart.palette.tipTitle' | transloco }}</strong>\n {{ 'quickStart.palette.tipText' | transloco }}\n </p>\n </dd-speaker-bubble-soft>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 3 \u2014 THEMES \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'03'\" [color]=\"colorGray\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.themes.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <div class=\"theme-cards\">\n <dd-card-minimal [color]=\"colorWhite\">\n <small>{{ 'quickStart.themes.lightEyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.themes.lightTitle' | transloco }}</h3>\n <p>{{ 'quickStart.themes.lightText' | transloco }}</p>\n </dd-card-minimal>\n <dd-card-minimal [color]=\"colorDark\">\n <small>{{ 'quickStart.themes.darkEyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.themes.darkTitle' | transloco }}</h3>\n <p>{{ 'quickStart.themes.darkText' | transloco }}</p>\n </dd-card-minimal>\n </div>\n\n <ng-template #themeHtmlSnippet>\n <pre class=\"accordion-code\"><code><html ddTheme=\"dark\">\n <body>\n <app-root></app-root>\n </body>\n</html></code></pre>\n </ng-template>\n\n <ng-template #themeToggleSnippet>\n <pre class=\"accordion-code\"><code>setTheme(theme: 'dark' | 'light') {{ '{' }}\n document.documentElement\n .setAttribute('ddTheme', theme);\n{{ '}' }}</code></pre>\n </ng-template>\n\n <div class=\"accordion-row\">\n <duck-dev-accordion\n [title]=\"'quickStart.themes.htmlAccordionTitle' | transloco\"\n [content]=\"themeHtmlSnippet\"\n />\n <duck-dev-accordion\n [title]=\"'quickStart.themes.toggleAccordionTitle' | transloco\"\n [content]=\"themeToggleSnippet\"\n [color]=\"colorViolet\"\n />\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 4 \u2014 CUSTOM THEME \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'04'\" [color]=\"colorDark\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.custom.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <dd-card-outline [color]=\"colorOrange\">\n <small>{{ 'quickStart.custom.eyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.custom.cardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.custom.cardText' | transloco }}</p>\n </dd-card-outline>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">styles.scss</div>\n <pre><code>[ddTheme='brand'] {{ '{' }}\n --dd-base-0: #ffffff;\n --dd-base-100: #f4f6ff;\n --dd-base-300: #dbe0ff;\n --dd-base-600: #0e1028;\n --dd-base-secondary: #6829ff;\n --dd-base-accent-orange: #fe7b20;\n --dd-base-accent-blue: #3254f3;\n{{ '}' }}</code></pre>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 5 \u2014 COLORS IN COMPONENTS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'05'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.colors.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.colors.description' | transloco }}</p>\n\n <div class=\"code-block code-block--compact\">\n <div class=\"code-block__label\">AccentEnumColor</div>\n <pre><code>import {{ '{' }} AccentEnumColor {{ '}' }} from 'duck-dev-lib';\n\n// Violet \u00B7 Orange \u00B7 White \u00B7 Gray \u00B7 Dark</code></pre>\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.progressTitle' | transloco }}</h3>\n <div class=\"progress-showcase\">\n <duck-dev-progress-line [label]=\"'Violet'\" [value]=\"85\" [color]=\"colorViolet\" />\n <duck-dev-progress-line [label]=\"'Orange'\" [value]=\"60\" [color]=\"colorOrange\" />\n <duck-dev-progress-line [label]=\"'Gray'\" [value]=\"40\" [color]=\"colorGray\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.buttonsTitle' | transloco }}</h3>\n <div class=\"buttons-showcase\">\n <duck-dev-button-casper [text]=\"'Casper'\" [colorButton]=\"colorViolet\" />\n <duck-dev-button-glide-over textButton=\"Glide Over\" [colorButton]=\"colorOrange\" />\n <duck-dev-button-flip [text]=\"'Flip'\" [colorButton]=\"colorDark\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.badgesTitle' | transloco }}</h3>\n <div class=\"badges-showcase\">\n <dd-badge [text]=\"'Solid'\" [color]=\"colorViolet\" [variant]=\"'solid'\" />\n <dd-badge [text]=\"'Soft'\" [color]=\"colorOrange\" [variant]=\"'soft'\" />\n <dd-badge [text]=\"'Outline'\" [color]=\"colorGray\" [variant]=\"'outline'\" />\n <dd-badge [text]=\"'Dark'\" [color]=\"colorDark\" [variant]=\"'solid'\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.cardsTitle' | transloco }}</h3>\n <div class=\"cards-showcase\">\n <dd-card-accent [color]=\"colorViolet\">\n <div>{{ 'quickStart.colors.cardViolet' | transloco }}</div>\n </dd-card-accent>\n <dd-card-accent [color]=\"colorOrange\">\n <div>{{ 'quickStart.colors.cardOrange' | transloco }}</div>\n </dd-card-accent>\n <dd-card-accent [color]=\"colorDark\">\n <div>{{ 'quickStart.colors.cardDark' | transloco }}</div>\n </dd-card-accent>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 6 \u2014 TWO STYLES \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'06'\" [color]=\"colorOrange\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.styles.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.styles.description' | transloco }}</p>\n\n <duck-dev-tab [tabs]=\"previewTabs\" (tabChange)=\"onPreviewTabChange($event)\">\n @if (activePreviewTab().id === 'classic') {\n <div class=\"style-preview\">\n <div class=\"style-preview__row\">\n <duck-dev-button-casper [text]=\"'Casper'\" [colorButton]=\"colorViolet\" />\n <duck-dev-button-glide-over textButton=\"Glide Over\" [colorButton]=\"colorOrange\" />\n <duck-dev-button-flip [text]=\"'Flip'\" [colorButton]=\"colorDark\" />\n </div>\n <div class=\"style-preview__row\">\n <dd-badge [text]=\"'Status'\" [color]=\"colorViolet\" [variant]=\"'solid'\" />\n <dd-badge [text]=\"'Label'\" [color]=\"colorOrange\" [variant]=\"'soft'\" />\n <dd-badge [text]=\"'Tag'\" [color]=\"colorGray\" [variant]=\"'outline'\" />\n </div>\n <duck-dev-progress-line [label]=\"'Progress'\" [value]=\"72\" [color]=\"colorViolet\" />\n <div class=\"style-preview__cards\">\n <dd-card-minimal [color]=\"colorViolet\">\n <small>Classic</small>\n <h3>{{ 'quickStart.styles.classicCardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.styles.classicCardText' | transloco }}</p>\n </dd-card-minimal>\n <dd-card-signal [color]=\"colorOrange\">\n <small>Signal</small>\n <h3>{{ 'quickStart.styles.signalCardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.styles.signalCardText' | transloco }}</p>\n </dd-card-signal>\n </div>\n </div>\n }\n @if (activePreviewTab().id === 'neobrutalism') {\n <div class=\"style-preview\">\n <div class=\"style-preview__row\">\n <duck-dev-button-neobrutal-slab\n [text]=\"'Slab'\"\n [helperText]=\"'click me'\"\n [colorButton]=\"colorViolet\"\n />\n <duck-dev-button-neobrutal-slab\n [text]=\"'Action'\"\n [helperText]=\"'do it'\"\n [colorButton]=\"colorOrange\"\n />\n </div>\n <dd-speaker-bubble-soft [color]=\"colorOrange\" [tail]=\"'right'\">\n <p>\n <strong>Neobrutalism</strong> \u2014\n {{ 'quickStart.styles.neobrutalBubbleText' | transloco }}\n </p>\n </dd-speaker-bubble-soft>\n </div>\n }\n </duck-dev-tab>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 7 \u2014 USAGE EXAMPLE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'07'\" [color]=\"colorGray\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.usage.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <ng-template #usageTemplate>\n <pre class=\"accordion-code\"><code><duck-dev-button-casper\n [text]=\"'Click me'\"\n [colorButton]=\"colorViolet\"\n/>\n\n<dd-badge\n [text]=\"'New'\"\n [color]=\"colorOrange\"\n [variant]=\"'solid'\"\n/>\n\n<dd-card-minimal [color]=\"colorViolet\">\n <h3>Title</h3>\n <p>Content goes here</p>\n</dd-card-minimal></code></pre>\n </ng-template>\n\n <ng-template #usageComponent>\n <pre\n class=\"accordion-code\"\n ><code>import {{ '{' }} Component {{ '}' }} from '@angular/core';\nimport {{ '{' }} ButtonCasper {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} Badge {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} DuckDevCardMinimal {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} AccentEnumColor {{ '}' }} from 'duck-dev-lib';\n\n@Component({{ '{' }}\n selector: 'app-example',\n standalone: true,\n imports: [ButtonCasper, Badge, DuckDevCardMinimal],\n templateUrl: './example.html',\n{{ '}' }})\nexport class ExampleComponent {{ '{' }}\n colorViolet = AccentEnumColor.Violet;\n colorOrange = AccentEnumColor.Orange;\n{{ '}' }}</code></pre>\n </ng-template>\n\n <div class=\"accordion-row\">\n <duck-dev-accordion\n [title]=\"'quickStart.usage.templateTitle' | transloco\"\n [content]=\"usageTemplate\"\n [color]=\"colorOrange\"\n />\n <duck-dev-accordion\n [title]=\"'quickStart.usage.componentTitle' | transloco\"\n [content]=\"usageComponent\"\n [color]=\"colorViolet\"\n />\n </div>\n\n <dd-speaker-bubble-soft [color]=\"colorGray\" [tail]=\"'left'\">\n <p>{{ 'quickStart.usage.tip' | transloco }}</p>\n </dd-speaker-bubble-soft>\n </dd-card-section>\n </section>\n</div>\n", styles: [".quick-start{max-width:960px;margin:0 auto;padding:48px 24px 80px;display:flex;flex-direction:column;gap:56px}.hero{text-align:center;padding:40px 0 16px}.hero__badges{display:flex;justify-content:center;gap:10px;margin-bottom:24px}.hero h1{font-size:42px;font-weight:800;color:var(--dd-base-600);line-height:1.15;margin:0 0 16px;letter-spacing:-.02em}.hero__subtitle{font-size:18px;color:var(--dd-base-400);line-height:1.6;max-width:600px;margin:0 auto}.step__header{display:flex;align-items:center;gap:14px;margin-bottom:20px}.step__header h2{font-size:26px;font-weight:700;color:var(--dd-base-600);margin:0}.section-description{font-size:16px;line-height:1.65;color:var(--dd-base-400);margin:0 0 28px}.code-block{margin:20px 0;border-radius:10px;overflow:hidden;border:1px solid var(--dd-base-300)}.code-block__label{padding:8px 16px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--dd-base-300);background:var(--dd-base-600);border-bottom:1px solid var(--dd-base-500)}.code-block pre{margin:0;padding:20px;background:var(--dd-base-600);overflow-x:auto}.code-block pre code{font-family:JetBrains Mono,Fira Code,Courier New,monospace;font-size:13px;line-height:1.7;color:var(--dd-base-100)}.code-block--compact{margin:0 0 28px}.accordion-code{margin:0;padding:20px;background:var(--dd-base-600);border-radius:8px;overflow-x:auto}.accordion-code code{font-family:JetBrains Mono,Fira Code,Courier New,monospace;font-size:13px;line-height:1.7;color:var(--dd-base-100)}.palette-grid{display:flex;flex-direction:column;gap:28px;margin-bottom:32px}.palette-group h3{font-size:14px;font-weight:600;color:var(--dd-base-500);text-transform:uppercase;letter-spacing:.06em;margin:0 0 12px}.swatch-row{display:flex;gap:6px;flex-wrap:wrap}.swatch{flex:1;min-width:60px;height:64px;border-radius:10px;border:1px solid var(--dd-base-300);display:flex;align-items:flex-end;justify-content:center;padding-bottom:8px;transition:transform .2s ease,box-shadow .2s ease}.swatch:hover{transform:translateY(-3px);box-shadow:0 6px 20px -8px var(--dd-base-300)}.swatch__label{font-size:11px;font-weight:600;color:var(--dd-base-500)}.swatch__label--light{color:var(--dd-base-0)}.swatch--accent{min-width:100px;height:72px}.theme-cards{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:28px}.accordion-row{display:flex;flex-direction:column;gap:12px;margin-top:20px}.showcase-title{font-size:15px;font-weight:600;color:var(--dd-base-500);text-transform:uppercase;letter-spacing:.04em;margin:32px 0 16px}.progress-showcase{display:flex;flex-direction:column;gap:16px}.buttons-showcase{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.badges-showcase{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.cards-showcase{display:flex;flex-direction:column;gap:12px}.style-preview{display:flex;flex-direction:column;gap:24px;padding:8px 0}.style-preview__row{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.style-preview__cards{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media(max-width:768px){.quick-start{padding:24px 16px 60px;gap:40px}.hero h1{font-size:30px}.hero__subtitle{font-size:16px}.step__header h2{font-size:22px}.theme-cards{grid-template-columns:1fr}.swatch{min-width:40px;height:52px}.swatch--accent{min-width:70px}.style-preview__cards{grid-template-columns:1fr}}@media(max-width:480px){.hero h1{font-size:26px}.buttons-showcase{flex-direction:column;align-items:flex-start}}\n"] }]
|
|
5838
|
+
], template: "<div class=\"quick-start\">\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 HERO \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <header class=\"hero\">\n <div class=\"hero__badges\">\n <dd-badge [text]=\"'Angular 21'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'sm'\" />\n <dd-badge [text]=\"'Signals'\" [color]=\"colorOrange\" [variant]=\"'soft'\" [size]=\"'sm'\" />\n <dd-badge [text]=\"'Standalone'\" [color]=\"colorGray\" [variant]=\"'outline'\" [size]=\"'sm'\" />\n </div>\n <h1>{{ 'quickStart.hero.title' | transloco }}</h1>\n <p class=\"hero__subtitle\">{{ 'quickStart.hero.subtitle' | transloco }}</p>\n </header>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 1 \u2014 INSTALL \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'01'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.install.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <dd-card-signal [color]=\"colorViolet\">\n <small>{{ 'quickStart.install.eyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.install.cardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.install.cardText' | transloco }}</p>\n </dd-card-signal>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">angular.json</div>\n <pre><code>\"styles\": [\n \"node_modules/duck-dev-lib/styles/variables.scss\",\n \"src/styles.scss\"\n]</code></pre>\n </div>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">app.config.ts</div>\n <pre><code>import {{ '{' }} provideTransloco {{ '}' }} from '@jsverse/transloco';\n\nexport const appConfig = {{ '{' }}\n providers: [\n provideTransloco({{ '{' }}\n config: {{ '{' }} availableLangs: ['en', 'ru'], defaultLang: 'en' {{ '}' }}\n {{ '}' }})\n ]\n{{ '}' }};</code></pre>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 2 \u2014 PALETTE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'02'\" [color]=\"colorOrange\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.palette.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.palette.description' | transloco }}</p>\n\n <div class=\"palette-grid\">\n <div class=\"palette-group\">\n <h3>{{ 'quickStart.palette.neutralsTitle' | transloco }}</h3>\n <div class=\"swatch-row\">\n <div class=\"swatch\" style=\"background: var(--dd-base-0)\">\n <span class=\"swatch__label\">0</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-100)\">\n <span class=\"swatch__label\">100</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-200)\">\n <span class=\"swatch__label\">200</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-300)\">\n <span class=\"swatch__label\">300</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-400)\">\n <span class=\"swatch__label swatch__label--light\">400</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-500)\">\n <span class=\"swatch__label swatch__label--light\">500</span>\n </div>\n <div class=\"swatch\" style=\"background: var(--dd-base-600)\">\n <span class=\"swatch__label swatch__label--light\">600</span>\n </div>\n </div>\n </div>\n\n <div class=\"palette-group\">\n <h3>{{ 'quickStart.palette.accentsTitle' | transloco }}</h3>\n <div class=\"swatch-row\">\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-secondary)\">\n <span class=\"swatch__label swatch__label--light\">secondary</span>\n </div>\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-accent-orange)\">\n <span class=\"swatch__label swatch__label--light\">orange</span>\n </div>\n <div class=\"swatch swatch--accent\" style=\"background: var(--dd-base-accent-blue)\">\n <span class=\"swatch__label swatch__label--light\">blue</span>\n </div>\n </div>\n </div>\n </div>\n\n <dd-speaker-bubble-soft [color]=\"colorViolet\" [tail]=\"'left'\">\n <p>\n <strong>{{ 'quickStart.palette.tipTitle' | transloco }}</strong>\n {{ 'quickStart.palette.tipText' | transloco }}\n </p>\n </dd-speaker-bubble-soft>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 3 \u2014 THEMES \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'03'\" [color]=\"colorGray\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.themes.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <div class=\"theme-cards\">\n <dd-card-minimal [color]=\"colorWhite\">\n <small>{{ 'quickStart.themes.lightEyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.themes.lightTitle' | transloco }}</h3>\n <p>{{ 'quickStart.themes.lightText' | transloco }}</p>\n </dd-card-minimal>\n <dd-card-minimal [color]=\"colorDark\">\n <small>{{ 'quickStart.themes.darkEyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.themes.darkTitle' | transloco }}</h3>\n <p>{{ 'quickStart.themes.darkText' | transloco }}</p>\n </dd-card-minimal>\n </div>\n\n <ng-template #themeHtmlSnippet>\n <pre class=\"accordion-code\"><code><html ddTheme=\"dark\">\n <body>\n <app-root></app-root>\n </body>\n</html></code></pre>\n </ng-template>\n\n <ng-template #themeToggleSnippet>\n <pre class=\"accordion-code\"><code>setTheme(theme: 'dark' | 'light') {{ '{' }}\n document.documentElement\n .setAttribute('ddTheme', theme);\n{{ '}' }}</code></pre>\n </ng-template>\n\n <div class=\"accordion-row\">\n <duck-dev-accordion\n [title]=\"'quickStart.themes.htmlAccordionTitle' | transloco\"\n [content]=\"themeHtmlSnippet\"\n />\n <duck-dev-accordion\n [title]=\"'quickStart.themes.toggleAccordionTitle' | transloco\"\n [content]=\"themeToggleSnippet\"\n [color]=\"colorViolet\"\n />\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 4 \u2014 CUSTOM THEME \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'04'\" [color]=\"colorDark\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.custom.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <dd-card-outline [color]=\"colorOrange\">\n <small>{{ 'quickStart.custom.eyebrow' | transloco }}</small>\n <h3>{{ 'quickStart.custom.cardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.custom.cardText' | transloco }}</p>\n </dd-card-outline>\n\n <div class=\"code-block\">\n <div class=\"code-block__label\">styles.scss</div>\n <pre><code>[ddTheme='brand'] {{ '{' }}\n --dd-base-0: #ffffff;\n --dd-base-100: #f4f6ff;\n --dd-base-300: #dbe0ff;\n --dd-base-600: #0e1028;\n --dd-base-secondary: #6829ff;\n --dd-base-accent-orange: #fe7b20;\n --dd-base-accent-blue: #3254f3;\n{{ '}' }}</code></pre>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 5 \u2014 COLORS IN COMPONENTS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'05'\" [color]=\"colorViolet\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.colors.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.colors.description' | transloco }}</p>\n\n <div class=\"code-block code-block--compact\">\n <div class=\"code-block__label\">AccentEnumColor</div>\n <pre><code>import {{ '{' }} AccentEnumColor {{ '}' }} from 'duck-dev-lib';\n\n// Violet \u00B7 Orange \u00B7 White \u00B7 Gray \u00B7 Dark</code></pre>\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.progressTitle' | transloco }}</h3>\n <div class=\"progress-showcase\">\n <duck-dev-progress-line [label]=\"'Violet'\" [value]=\"85\" [color]=\"colorViolet\" />\n <duck-dev-progress-line [label]=\"'Orange'\" [value]=\"60\" [color]=\"colorOrange\" />\n <duck-dev-progress-line [label]=\"'Gray'\" [value]=\"40\" [color]=\"colorGray\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.buttonsTitle' | transloco }}</h3>\n <div class=\"buttons-showcase\">\n <duck-dev-button-casper [text]=\"'Casper'\" [colorButton]=\"colorViolet\" />\n <duck-dev-button-glide-over textButton=\"Glide Over\" [colorButton]=\"colorOrange\" />\n <duck-dev-button-flip [text]=\"'Flip'\" [colorButton]=\"colorDark\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.badgesTitle' | transloco }}</h3>\n <div class=\"badges-showcase\">\n <dd-badge [text]=\"'Solid'\" [color]=\"colorViolet\" [variant]=\"'solid'\" />\n <dd-badge [text]=\"'Soft'\" [color]=\"colorOrange\" [variant]=\"'soft'\" />\n <dd-badge [text]=\"'Outline'\" [color]=\"colorGray\" [variant]=\"'outline'\" />\n <dd-badge [text]=\"'Dark'\" [color]=\"colorDark\" [variant]=\"'solid'\" />\n </div>\n\n <h3 class=\"showcase-title\">{{ 'quickStart.colors.cardsTitle' | transloco }}</h3>\n <div class=\"cards-showcase\">\n <dd-card-accent [color]=\"colorViolet\">\n <div>{{ 'quickStart.colors.cardViolet' | transloco }}</div>\n </dd-card-accent>\n <dd-card-accent [color]=\"colorOrange\">\n <div>{{ 'quickStart.colors.cardOrange' | transloco }}</div>\n </dd-card-accent>\n <dd-card-accent [color]=\"colorDark\">\n <div>{{ 'quickStart.colors.cardDark' | transloco }}</div>\n </dd-card-accent>\n </div>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 6 \u2014 TWO STYLES \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'06'\" [color]=\"colorOrange\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.styles.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.styles.description' | transloco }}</p>\n\n <duck-dev-tab [tabs]=\"previewTabs\" (tabChange)=\"onPreviewTabChange($event)\">\n @if (activePreviewTab().id === 'classic') {\n <div class=\"style-preview\">\n <div class=\"style-preview__row\">\n <duck-dev-button-casper [text]=\"'Casper'\" [colorButton]=\"colorViolet\" />\n <duck-dev-button-glide-over textButton=\"Glide Over\" [colorButton]=\"colorOrange\" />\n <duck-dev-button-flip [text]=\"'Flip'\" [colorButton]=\"colorDark\" />\n </div>\n <div class=\"style-preview__row\">\n <dd-badge [text]=\"'Status'\" [color]=\"colorViolet\" [variant]=\"'solid'\" />\n <dd-badge [text]=\"'Label'\" [color]=\"colorOrange\" [variant]=\"'soft'\" />\n <dd-badge [text]=\"'Tag'\" [color]=\"colorGray\" [variant]=\"'outline'\" />\n </div>\n <duck-dev-progress-line [label]=\"'Progress'\" [value]=\"72\" [color]=\"colorViolet\" />\n <div class=\"style-preview__cards\">\n <dd-card-minimal [color]=\"colorViolet\">\n <small>Classic</small>\n <h3>{{ 'quickStart.styles.classicCardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.styles.classicCardText' | transloco }}</p>\n </dd-card-minimal>\n <dd-card-signal [color]=\"colorOrange\">\n <small>Signal</small>\n <h3>{{ 'quickStart.styles.signalCardTitle' | transloco }}</h3>\n <p>{{ 'quickStart.styles.signalCardText' | transloco }}</p>\n </dd-card-signal>\n </div>\n </div>\n }\n @if (activePreviewTab().id === 'neobrutalism') {\n <div class=\"style-preview\">\n <div class=\"style-preview__row\">\n <duck-dev-button-neobrutal-slab\n [text]=\"'Slab'\"\n [helperText]=\"'click me'\"\n [colorButton]=\"colorViolet\"\n />\n <duck-dev-button-neobrutal-slab\n [text]=\"'Action'\"\n [helperText]=\"'do it'\"\n [colorButton]=\"colorOrange\"\n />\n </div>\n <dd-speaker-bubble-soft [color]=\"colorOrange\" [tail]=\"'right'\">\n <p>\n <strong>Neobrutalism</strong> \u2014\n {{ 'quickStart.styles.neobrutalBubbleText' | transloco }}\n </p>\n </dd-speaker-bubble-soft>\n </div>\n }\n </duck-dev-tab>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 7 \u2014 USAGE EXAMPLE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'07'\" [color]=\"colorGray\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.usage.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <ng-template #usageTemplate>\n <pre class=\"accordion-code\"><code><duck-dev-button-casper\n [text]=\"'Click me'\"\n [colorButton]=\"colorViolet\"\n/>\n\n<dd-badge\n [text]=\"'New'\"\n [color]=\"colorOrange\"\n [variant]=\"'solid'\"\n/>\n\n<dd-card-minimal [color]=\"colorViolet\">\n <h3>Title</h3>\n <p>Content goes here</p>\n</dd-card-minimal></code></pre>\n </ng-template>\n\n <ng-template #usageComponent>\n <pre\n class=\"accordion-code\"\n ><code>import {{ '{' }} Component {{ '}' }} from '@angular/core';\nimport {{ '{' }} ButtonCasper {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} Badge {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} DuckDevCardMinimal {{ '}' }} from 'duck-dev-lib';\nimport {{ '{' }} AccentEnumColor {{ '}' }} from 'duck-dev-lib';\n\n@Component({{ '{' }}\n selector: 'app-example',\n standalone: true,\n imports: [ButtonCasper, Badge, DuckDevCardMinimal],\n templateUrl: './example.html',\n{{ '}' }})\nexport class ExampleComponent {{ '{' }}\n colorViolet = AccentEnumColor.Violet;\n colorOrange = AccentEnumColor.Orange;\n{{ '}' }}</code></pre>\n </ng-template>\n\n <div class=\"accordion-row\">\n <duck-dev-accordion\n [title]=\"'quickStart.usage.templateTitle' | transloco\"\n [content]=\"usageTemplate\"\n [color]=\"colorOrange\"\n />\n <duck-dev-accordion\n [title]=\"'quickStart.usage.componentTitle' | transloco\"\n [content]=\"usageComponent\"\n [color]=\"colorViolet\"\n />\n </div>\n\n <dd-speaker-bubble-soft [color]=\"colorGray\" [tail]=\"'left'\">\n <p>{{ 'quickStart.usage.tip' | transloco }}</p>\n </dd-speaker-bubble-soft>\n </dd-card-section>\n </section>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 STEP 8 \u2014 DOWNLOAD DOCS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <section class=\"step\">\n <div class=\"step__header\">\n <dd-badge [text]=\"'08'\" [color]=\"colorDark\" [variant]=\"'solid'\" [size]=\"'md'\" />\n <h2>{{ 'quickStart.download.title' | transloco }}</h2>\n </div>\n\n <dd-card-section>\n <p class=\"section-description\">{{ 'quickStart.download.description' | transloco }}</p>\n\n <div class=\"download-block\">\n <duck-dev-button-neobrutal-slab\n [text]=\"'quickStart.download.button' | transloco\"\n [helperText]=\"'quickStart.download.helper' | transloco\"\n [colorButton]=\"colorViolet\"\n (click)=\"downloadDocs()\"\n />\n </div>\n </dd-card-section>\n </section>\n</div>\n", styles: [".quick-start{max-width:960px;margin:0 auto;padding:48px 24px 80px;display:flex;flex-direction:column;gap:56px}.hero{text-align:center;padding:40px 0 16px}.hero__badges{display:flex;justify-content:center;gap:10px;margin-bottom:24px}.hero h1{font-size:42px;font-weight:800;color:var(--dd-base-600);line-height:1.15;margin:0 0 16px;letter-spacing:-.02em}.hero__subtitle{font-size:18px;color:var(--dd-base-400);line-height:1.6;max-width:600px;margin:0 auto}.step__header{display:flex;align-items:center;gap:14px;margin-bottom:20px}.step__header h2{font-size:26px;font-weight:700;color:var(--dd-base-600);margin:0}.section-description{font-size:16px;line-height:1.65;color:var(--dd-base-400);margin:0 0 28px}.code-block{margin:20px 0;border-radius:10px;overflow:hidden;border:1px solid var(--dd-base-300)}.code-block__label{padding:8px 16px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--dd-base-300);background:var(--dd-base-600);border-bottom:1px solid var(--dd-base-500)}.code-block pre{margin:0;padding:20px;background:var(--dd-base-600);overflow-x:auto}.code-block pre code{font-family:JetBrains Mono,Fira Code,Courier New,monospace;font-size:13px;line-height:1.7;color:var(--dd-base-100)}.code-block--compact{margin:0 0 28px}.accordion-code{margin:0;padding:20px;background:var(--dd-base-600);border-radius:8px;overflow-x:auto}.accordion-code code{font-family:JetBrains Mono,Fira Code,Courier New,monospace;font-size:13px;line-height:1.7;color:var(--dd-base-100)}.palette-grid{display:flex;flex-direction:column;gap:28px;margin-bottom:32px}.palette-group h3{font-size:14px;font-weight:600;color:var(--dd-base-500);text-transform:uppercase;letter-spacing:.06em;margin:0 0 12px}.swatch-row{display:flex;gap:6px;flex-wrap:wrap}.swatch{flex:1;min-width:60px;height:64px;border-radius:10px;border:1px solid var(--dd-base-300);display:flex;align-items:flex-end;justify-content:center;padding-bottom:8px;transition:transform .2s ease,box-shadow .2s ease}.swatch:hover{transform:translateY(-3px);box-shadow:0 6px 20px -8px var(--dd-base-300)}.swatch__label{font-size:11px;font-weight:600;color:var(--dd-base-500)}.swatch__label--light{color:var(--dd-base-0)}.swatch--accent{min-width:100px;height:72px}.theme-cards{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:28px}.accordion-row{display:flex;flex-direction:column;gap:12px;margin-top:20px}.showcase-title{font-size:15px;font-weight:600;color:var(--dd-base-500);text-transform:uppercase;letter-spacing:.04em;margin:32px 0 16px}.progress-showcase{display:flex;flex-direction:column;gap:16px}.buttons-showcase{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.badges-showcase{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.cards-showcase{display:flex;flex-direction:column;gap:12px}.download-block{display:flex;justify-content:center;padding:12px 0 4px}.style-preview{display:flex;flex-direction:column;gap:24px;padding:8px 0}.style-preview__row{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.style-preview__cards{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media(max-width:768px){.quick-start{padding:24px 16px 60px;gap:40px}.hero h1{font-size:30px}.hero__subtitle{font-size:16px}.step__header h2{font-size:22px}.theme-cards{grid-template-columns:1fr}.swatch{min-width:40px;height:52px}.swatch--accent{min-width:70px}.style-preview__cards{grid-template-columns:1fr}}@media(max-width:480px){.hero h1{font-size:26px}.buttons-showcase{flex-direction:column;align-items:flex-start}}\n"] }]
|
|
5826
5839
|
}] });
|
|
5827
5840
|
|
|
5828
5841
|
class DuckDevModalClassic {
|
|
@@ -6064,17 +6077,143 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
|
|
|
6064
6077
|
args: [DuckDevSegmentButton]
|
|
6065
6078
|
}], buttonsContainer: [{ type: i0.ViewChild, args: ['buttonsContainer', { isSignal: true }] }] } });
|
|
6066
6079
|
|
|
6080
|
+
class DuckDevSegmentNeobrutalVertical {
|
|
6081
|
+
cdr = inject(ChangeDetectorRef);
|
|
6082
|
+
value = input(undefined, { ...(ngDevMode ? { debugName: "value" } : {}) });
|
|
6083
|
+
color = input(AccentEnumColor.White, { ...(ngDevMode ? { debugName: "color" } : {}) });
|
|
6084
|
+
valueChange = output();
|
|
6085
|
+
ionChange = output();
|
|
6086
|
+
segmentButtons;
|
|
6087
|
+
buttonsContainer = viewChild.required('buttonsContainer');
|
|
6088
|
+
buttons = [];
|
|
6089
|
+
selectedValue;
|
|
6090
|
+
indicatorPosition = 0;
|
|
6091
|
+
indicatorHeight = 0;
|
|
6092
|
+
segmentStyle = computed(() => this.getSegmentStyle(this.color()), { ...(ngDevMode ? { debugName: "segmentStyle" } : {}) });
|
|
6093
|
+
constructor() {
|
|
6094
|
+
afterNextRender(() => {
|
|
6095
|
+
this.rebuildButtons();
|
|
6096
|
+
if (!this.selectedValue && this.buttons.length > 0) {
|
|
6097
|
+
this.selectedValue = this.buttons[0].value;
|
|
6098
|
+
}
|
|
6099
|
+
this.updateIndicator(this.getSelectedIndex());
|
|
6100
|
+
this.cdr.markForCheck();
|
|
6101
|
+
});
|
|
6102
|
+
}
|
|
6103
|
+
ngAfterContentInit() {
|
|
6104
|
+
this.rebuildButtons();
|
|
6105
|
+
const incoming = this.value();
|
|
6106
|
+
this.selectedValue = incoming ?? this.selectedValue;
|
|
6107
|
+
this.segmentButtons.changes.subscribe(() => {
|
|
6108
|
+
this.rebuildButtons();
|
|
6109
|
+
setTimeout(() => this.updateIndicator(this.getSelectedIndex()));
|
|
6110
|
+
});
|
|
6111
|
+
}
|
|
6112
|
+
selectButton(value, index) {
|
|
6113
|
+
if (this.selectedValue === value) {
|
|
6114
|
+
this.updateIndicator(index);
|
|
6115
|
+
return;
|
|
6116
|
+
}
|
|
6117
|
+
this.selectedValue = value;
|
|
6118
|
+
this.valueChange.emit(value);
|
|
6119
|
+
this.ionChange.emit({ detail: { value } });
|
|
6120
|
+
this.updateIndicator(index);
|
|
6121
|
+
}
|
|
6122
|
+
rebuildButtons() {
|
|
6123
|
+
const btns = this.segmentButtons?.toArray() ?? [];
|
|
6124
|
+
this.buttons = btns.map((button) => ({
|
|
6125
|
+
value: button.value(),
|
|
6126
|
+
contentId: button.contentId(),
|
|
6127
|
+
template: button.templateRef(),
|
|
6128
|
+
}));
|
|
6129
|
+
}
|
|
6130
|
+
getSelectedIndex() {
|
|
6131
|
+
return Math.max(0, this.buttons.findIndex((button) => button.value === this.selectedValue));
|
|
6132
|
+
}
|
|
6133
|
+
updateIndicator(index) {
|
|
6134
|
+
const container = this.buttonsContainer().nativeElement;
|
|
6135
|
+
const buttonElements = container.querySelectorAll('.dd-segment-neo-v__button');
|
|
6136
|
+
if (buttonElements[index]) {
|
|
6137
|
+
const button = buttonElements[index];
|
|
6138
|
+
this.indicatorHeight = button.offsetHeight;
|
|
6139
|
+
this.indicatorPosition = button.offsetTop;
|
|
6140
|
+
}
|
|
6141
|
+
}
|
|
6142
|
+
getSegmentStyle(color) {
|
|
6143
|
+
switch (color) {
|
|
6144
|
+
case AccentEnumColor.Violet:
|
|
6145
|
+
return {
|
|
6146
|
+
'--dd-segment-neo-v-surface': 'var(--dd-base-secondary)',
|
|
6147
|
+
'--dd-segment-neo-v-panel': 'color-mix(in srgb, var(--dd-base-secondary) 84%, var(--dd-base-0))',
|
|
6148
|
+
'--dd-segment-neo-v-accent': 'var(--dd-base-accent-yellow)',
|
|
6149
|
+
'--dd-segment-neo-v-shadow': 'var(--dd-base-accent-blue)',
|
|
6150
|
+
'--dd-segment-neo-v-text': 'var(--dd-base-0)',
|
|
6151
|
+
'--dd-segment-neo-v-muted': 'color-mix(in srgb, var(--dd-base-0) 74%, transparent)',
|
|
6152
|
+
};
|
|
6153
|
+
case AccentEnumColor.Orange:
|
|
6154
|
+
return {
|
|
6155
|
+
'--dd-segment-neo-v-surface': 'var(--dd-base-accent-orange)',
|
|
6156
|
+
'--dd-segment-neo-v-panel': 'color-mix(in srgb, var(--dd-base-accent-yellow) 68%, var(--dd-base-0))',
|
|
6157
|
+
'--dd-segment-neo-v-accent': 'var(--dd-base-accent-pink)',
|
|
6158
|
+
'--dd-segment-neo-v-shadow': 'var(--dd-base-accent-yellow)',
|
|
6159
|
+
'--dd-segment-neo-v-text': 'var(--dd-base-600)',
|
|
6160
|
+
'--dd-segment-neo-v-muted': 'color-mix(in srgb, var(--dd-base-600) 66%, transparent)',
|
|
6161
|
+
};
|
|
6162
|
+
case AccentEnumColor.Gray:
|
|
6163
|
+
return {
|
|
6164
|
+
'--dd-segment-neo-v-surface': 'var(--dd-base-100)',
|
|
6165
|
+
'--dd-segment-neo-v-panel': 'var(--dd-base-0)',
|
|
6166
|
+
'--dd-segment-neo-v-accent': 'var(--dd-base-accent-blue)',
|
|
6167
|
+
'--dd-segment-neo-v-shadow': 'var(--dd-base-400)',
|
|
6168
|
+
'--dd-segment-neo-v-text': 'var(--dd-base-600)',
|
|
6169
|
+
'--dd-segment-neo-v-muted': 'color-mix(in srgb, var(--dd-base-600) 58%, transparent)',
|
|
6170
|
+
};
|
|
6171
|
+
case AccentEnumColor.Dark:
|
|
6172
|
+
return {
|
|
6173
|
+
'--dd-segment-neo-v-surface': 'var(--dd-base-600)',
|
|
6174
|
+
'--dd-segment-neo-v-panel': 'color-mix(in srgb, var(--dd-base-accent-orange) 22%, var(--dd-base-500))',
|
|
6175
|
+
'--dd-segment-neo-v-accent': 'var(--dd-base-accent-yellow)',
|
|
6176
|
+
'--dd-segment-neo-v-shadow': 'var(--dd-base-accent-orange)',
|
|
6177
|
+
'--dd-segment-neo-v-text': 'var(--dd-base-accent-yellow)',
|
|
6178
|
+
'--dd-segment-neo-v-muted': 'color-mix(in srgb, var(--dd-base-0) 54%, transparent)',
|
|
6179
|
+
};
|
|
6180
|
+
case AccentEnumColor.White:
|
|
6181
|
+
default:
|
|
6182
|
+
return {
|
|
6183
|
+
'--dd-segment-neo-v-surface': 'var(--dd-base-0)',
|
|
6184
|
+
'--dd-segment-neo-v-panel': 'color-mix(in srgb, var(--dd-base-accent-blue) 14%, var(--dd-base-0))',
|
|
6185
|
+
'--dd-segment-neo-v-accent': 'var(--dd-base-accent-orange)',
|
|
6186
|
+
'--dd-segment-neo-v-shadow': 'var(--dd-base-accent-blue)',
|
|
6187
|
+
'--dd-segment-neo-v-text': 'var(--dd-base-600)',
|
|
6188
|
+
'--dd-segment-neo-v-muted': 'color-mix(in srgb, var(--dd-base-400) 72%, transparent)',
|
|
6189
|
+
};
|
|
6190
|
+
}
|
|
6191
|
+
}
|
|
6192
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DuckDevSegmentNeobrutalVertical, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6193
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: DuckDevSegmentNeobrutalVertical, isStandalone: true, selector: "duck-dev-segment-neobrutal-vertical", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", ionChange: "ionChange" }, queries: [{ propertyName: "segmentButtons", predicate: DuckDevSegmentButton }], viewQueries: [{ propertyName: "buttonsContainer", first: true, predicate: ["buttonsContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"dd-segment-neo-v\" [ngStyle]=\"segmentStyle()\">\n <div class=\"dd-segment-neo-v__indicator-shell\">\n <div\n class=\"dd-segment-neo-v__indicator\"\n [style.transform]=\"'translateY(' + indicatorPosition + 'px)'\"\n [style.height.px]=\"indicatorHeight\"\n >\n <span class=\"dd-segment-neo-v__indicator-notch\"></span>\n </div>\n </div>\n\n <div class=\"dd-segment-neo-v__buttons\" #buttonsContainer>\n @for (button of buttons; track button.value; let i = $index) {\n <button\n class=\"dd-segment-neo-v__button\"\n [class.dd-segment-neo-v__button--checked]=\"selectedValue === button.value\"\n (click)=\"selectButton(button.value, i)\"\n type=\"button\"\n >\n <span class=\"dd-segment-neo-v__button-copy\">\n <ng-container *ngTemplateOutlet=\"button.template\" />\n </span>\n </button>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:fit-content;min-width:220px}.dd-segment-neo-v{--dd-segment-neo-v-surface: var(--dd-base-0);--dd-segment-neo-v-panel: var(--dd-base-100);--dd-segment-neo-v-accent: var(--dd-base-accent-blue);--dd-segment-neo-v-shadow: var(--dd-base-accent-orange);--dd-segment-neo-v-text: var(--dd-base-600);--dd-segment-neo-v-muted: color-mix(in srgb, var(--dd-base-600) 58%, transparent);position:relative;display:block;padding:10px;border:4px solid var(--dd-neo-ink);background:linear-gradient(160deg,color-mix(in srgb,var(--dd-segment-neo-v-accent) 24%,transparent) 0 8%,transparent 8% 100%),var(--dd-segment-neo-v-surface);box-shadow:8px 8px 0 var(--dd-segment-neo-v-shadow);overflow:clip}.dd-segment-neo-v:before{content:\"\";position:absolute;right:-4px;top:16px;width:8px;height:40px;background:var(--dd-segment-neo-v-accent);border:3px solid var(--dd-neo-ink);border-right:0;z-index:0}.dd-segment-neo-v:after{content:\"\";position:absolute;width:18px;height:18px;background:var(--dd-segment-neo-v-accent);border:3px solid var(--dd-neo-ink);z-index:0;right:20px;bottom:-9px;transform:rotate(12deg)}.dd-segment-neo-v__indicator-shell{position:absolute;inset:10px;z-index:1}.dd-segment-neo-v__indicator{position:absolute;top:0;left:0;right:0;border:3px solid var(--dd-neo-ink);background:linear-gradient(160deg,color-mix(in srgb,var(--dd-segment-neo-v-accent) 36%,transparent) 0 14%,transparent 14% 100%),var(--dd-segment-neo-v-panel);box-shadow:4px 4px 0 var(--dd-neo-shadow);transition:transform .3s cubic-bezier(.22,1,.36,1),height .3s cubic-bezier(.22,1,.36,1)}.dd-segment-neo-v__indicator-notch{position:absolute;top:14px;left:-3px;width:16px;height:16px;border-right:3px solid var(--dd-neo-ink);border-top:3px solid var(--dd-neo-ink);background:var(--dd-segment-neo-v-accent)}.dd-segment-neo-v__buttons{position:relative;z-index:2;display:flex;flex-direction:column;width:100%;gap:6px}.dd-segment-neo-v__button{position:relative;display:flex;align-items:center;justify-content:flex-start;min-height:56px;padding:14px 20px;border:0;background:transparent;color:var(--dd-segment-neo-v-muted);cursor:pointer;text-align:left;font:inherit;width:100%;transition:transform .18s ease,color .18s ease;-webkit-tap-highlight-color:transparent}.dd-segment-neo-v__button:hover{transform:translate(3px)}.dd-segment-neo-v__button:focus-visible{outline:3px solid var(--dd-segment-neo-v-accent);outline-offset:-3px}.dd-segment-neo-v__button-copy{position:relative;display:inline-flex;align-items:center;min-width:0;font-size:.78rem;font-weight:1000;letter-spacing:.12em;line-height:1.3;text-transform:uppercase;text-wrap:balance}.dd-segment-neo-v__button--checked{color:var(--dd-segment-neo-v-text)}@media(max-width:640px){:host{min-width:180px}.dd-segment-neo-v{padding:8px;box-shadow:6px 6px 0 var(--dd-segment-neo-v-shadow)}.dd-segment-neo-v__indicator-shell{inset:8px}.dd-segment-neo-v__buttons{gap:2px}.dd-segment-neo-v__button{min-height:48px;padding:10px 16px}.dd-segment-neo-v__button-copy{font-size:.72rem;letter-spacing:.1em}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
6194
|
+
}
|
|
6195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DuckDevSegmentNeobrutalVertical, decorators: [{
|
|
6196
|
+
type: Component,
|
|
6197
|
+
args: [{ selector: 'duck-dev-segment-neobrutal-vertical', imports: [NgTemplateOutlet, NgStyle], template: "<div class=\"dd-segment-neo-v\" [ngStyle]=\"segmentStyle()\">\n <div class=\"dd-segment-neo-v__indicator-shell\">\n <div\n class=\"dd-segment-neo-v__indicator\"\n [style.transform]=\"'translateY(' + indicatorPosition + 'px)'\"\n [style.height.px]=\"indicatorHeight\"\n >\n <span class=\"dd-segment-neo-v__indicator-notch\"></span>\n </div>\n </div>\n\n <div class=\"dd-segment-neo-v__buttons\" #buttonsContainer>\n @for (button of buttons; track button.value; let i = $index) {\n <button\n class=\"dd-segment-neo-v__button\"\n [class.dd-segment-neo-v__button--checked]=\"selectedValue === button.value\"\n (click)=\"selectButton(button.value, i)\"\n type=\"button\"\n >\n <span class=\"dd-segment-neo-v__button-copy\">\n <ng-container *ngTemplateOutlet=\"button.template\" />\n </span>\n </button>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:fit-content;min-width:220px}.dd-segment-neo-v{--dd-segment-neo-v-surface: var(--dd-base-0);--dd-segment-neo-v-panel: var(--dd-base-100);--dd-segment-neo-v-accent: var(--dd-base-accent-blue);--dd-segment-neo-v-shadow: var(--dd-base-accent-orange);--dd-segment-neo-v-text: var(--dd-base-600);--dd-segment-neo-v-muted: color-mix(in srgb, var(--dd-base-600) 58%, transparent);position:relative;display:block;padding:10px;border:4px solid var(--dd-neo-ink);background:linear-gradient(160deg,color-mix(in srgb,var(--dd-segment-neo-v-accent) 24%,transparent) 0 8%,transparent 8% 100%),var(--dd-segment-neo-v-surface);box-shadow:8px 8px 0 var(--dd-segment-neo-v-shadow);overflow:clip}.dd-segment-neo-v:before{content:\"\";position:absolute;right:-4px;top:16px;width:8px;height:40px;background:var(--dd-segment-neo-v-accent);border:3px solid var(--dd-neo-ink);border-right:0;z-index:0}.dd-segment-neo-v:after{content:\"\";position:absolute;width:18px;height:18px;background:var(--dd-segment-neo-v-accent);border:3px solid var(--dd-neo-ink);z-index:0;right:20px;bottom:-9px;transform:rotate(12deg)}.dd-segment-neo-v__indicator-shell{position:absolute;inset:10px;z-index:1}.dd-segment-neo-v__indicator{position:absolute;top:0;left:0;right:0;border:3px solid var(--dd-neo-ink);background:linear-gradient(160deg,color-mix(in srgb,var(--dd-segment-neo-v-accent) 36%,transparent) 0 14%,transparent 14% 100%),var(--dd-segment-neo-v-panel);box-shadow:4px 4px 0 var(--dd-neo-shadow);transition:transform .3s cubic-bezier(.22,1,.36,1),height .3s cubic-bezier(.22,1,.36,1)}.dd-segment-neo-v__indicator-notch{position:absolute;top:14px;left:-3px;width:16px;height:16px;border-right:3px solid var(--dd-neo-ink);border-top:3px solid var(--dd-neo-ink);background:var(--dd-segment-neo-v-accent)}.dd-segment-neo-v__buttons{position:relative;z-index:2;display:flex;flex-direction:column;width:100%;gap:6px}.dd-segment-neo-v__button{position:relative;display:flex;align-items:center;justify-content:flex-start;min-height:56px;padding:14px 20px;border:0;background:transparent;color:var(--dd-segment-neo-v-muted);cursor:pointer;text-align:left;font:inherit;width:100%;transition:transform .18s ease,color .18s ease;-webkit-tap-highlight-color:transparent}.dd-segment-neo-v__button:hover{transform:translate(3px)}.dd-segment-neo-v__button:focus-visible{outline:3px solid var(--dd-segment-neo-v-accent);outline-offset:-3px}.dd-segment-neo-v__button-copy{position:relative;display:inline-flex;align-items:center;min-width:0;font-size:.78rem;font-weight:1000;letter-spacing:.12em;line-height:1.3;text-transform:uppercase;text-wrap:balance}.dd-segment-neo-v__button--checked{color:var(--dd-segment-neo-v-text)}@media(max-width:640px){:host{min-width:180px}.dd-segment-neo-v{padding:8px;box-shadow:6px 6px 0 var(--dd-segment-neo-v-shadow)}.dd-segment-neo-v__indicator-shell{inset:8px}.dd-segment-neo-v__buttons{gap:2px}.dd-segment-neo-v__button{min-height:48px;padding:10px 16px}.dd-segment-neo-v__button-copy{font-size:.72rem;letter-spacing:.1em}}\n"] }]
|
|
6198
|
+
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], ionChange: [{ type: i0.Output, args: ["ionChange"] }], segmentButtons: [{
|
|
6199
|
+
type: ContentChildren,
|
|
6200
|
+
args: [DuckDevSegmentButton]
|
|
6201
|
+
}], buttonsContainer: [{ type: i0.ViewChild, args: ['buttonsContainer', { isSignal: true }] }] } });
|
|
6202
|
+
|
|
6067
6203
|
class SegmentBlock {
|
|
6068
6204
|
selected = signal('all', { ...(ngDevMode ? { debugName: "selected" } : {}) });
|
|
6069
6205
|
neobrutalSelected = signal('rush', { ...(ngDevMode ? { debugName: "neobrutalSelected" } : {}) });
|
|
6206
|
+
verticalSelected = signal('strategy', { ...(ngDevMode ? { debugName: "verticalSelected" } : {}) });
|
|
6070
6207
|
lastEvent = signal('', { ...(ngDevMode ? { debugName: "lastEvent" } : {}) });
|
|
6071
6208
|
colorViolet = AccentEnumColor.Violet;
|
|
6072
6209
|
colorOrange = AccentEnumColor.Orange;
|
|
6210
|
+
colorDark = AccentEnumColor.Dark;
|
|
6211
|
+
colorGray = AccentEnumColor.Gray;
|
|
6073
6212
|
onIonChange(e) {
|
|
6074
6213
|
this.lastEvent.set(e.detail.value);
|
|
6075
6214
|
}
|
|
6076
6215
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: SegmentBlock, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6077
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.1", type: SegmentBlock, isStandalone: true, selector: "app-segment-block", ngImport: i0, template: "<div class=\"demo-container\">\n <h1>{{ 'segmentDoc.title' | transloco }}</h1>\n\n <dd-card-section>\n <h2>{{ 'segmentDoc.basic.title' | transloco }}</h2>\n <p class=\"description\">{{ 'segmentDoc.basic.description' | transloco }}</p>\n\n <div class=\"usage-block\">\n <h3>{{ 'segmentDoc.basic.usage' | transloco }}</h3>\n <pre><code><dd-segment-classic [value]=\"selected\" (valueChange)=\"onChange($event)\">\n <dd-segment-button value=\"all\">All</dd-segment-button>\n <dd-segment-button value=\"articles\">Articles</dd-segment-button>\n <dd-segment-button value=\"videos\">Videos</dd-segment-button>\n</dd-segment-classic></code></pre>\n </div>\n\n <div class=\"inputs-block\">\n <h3>{{ 'segmentDoc.basic.inputs' | transloco }}</h3>\n <ul>\n <li><strong>value</strong> \u2014 {{ 'segmentDoc.inputsDesc.value' | transloco }}</li>\n <li>\n <strong>valueChange</strong> \u2014 {{ 'segmentDoc.inputsDesc.valueChange' | transloco }}\n </li>\n <li><strong>ionChange</strong> \u2014 {{ 'segmentDoc.inputsDesc.ionChange' | transloco }}</li>\n <li><strong>color</strong> \u2014 {{ 'segmentDoc.inputsDesc.color' | transloco }}</li>\n <li>\n <strong>dd-segment-button[value]</strong> \u2014\n {{ 'segmentDoc.inputsDesc.buttonValue' | transloco }}\n </li>\n <li>\n <strong>dd-segment-button</strong> \u2014\n {{ 'segmentDoc.inputsDesc.buttonContent' | transloco }}\n </li>\n </ul>\n </div>\n\n <div class=\"examples-block\">\n <h3>{{ 'segmentDoc.basic.examples' | transloco }}</h3>\n\n <div class=\"example-row\">\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.basic' | transloco }}</p>\n <dd-segment-classic>\n <dd-segment-button value=\"all\">{{\n 'segmentDoc.labels.all' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"articles\">{{\n 'segmentDoc.labels.articles' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"videos\">{{\n 'segmentDoc.labels.videos' | transloco\n }}</dd-segment-button>\n </dd-segment-classic>\n </div>\n\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.withBinding' | transloco }}</p>\n <dd-segment-classic\n [value]=\"selected()\"\n (valueChange)=\"selected.set($event)\"\n (ionChange)=\"onIonChange($event)\"\n >\n <dd-segment-button value=\"all\">{{\n 'segmentDoc.labels.all' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"articles\">{{\n 'segmentDoc.labels.articles' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"videos\">{{\n 'segmentDoc.labels.videos' | transloco\n }}</dd-segment-button>\n </dd-segment-classic>\n <div class=\"state-hint\">\n <span>{{ 'segmentDoc.labels.selected' | transloco }}: </span>\n <b>{{ selected() }}</b>\n <span class=\"divider\">|</span>\n <span\n >ionChange: <b>{{ lastEvent() }}</b></span\n >\n </div>\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.filters' | transloco }}</p>\n <dd-segment-classic [value]=\"'all'\">\n <dd-segment-button value=\"all\">{{\n 'segmentDoc.labels.all' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"articles\">{{\n 'segmentDoc.labels.articles' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"videos\">{{\n 'segmentDoc.labels.videos' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"photos\">{{\n 'segmentDoc.labels.photos' | transloco\n }}</dd-segment-button>\n </dd-segment-classic>\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.neobrutalViolet' | transloco }}</p>\n <duck-dev-segment-neobrutal\n [value]=\"neobrutalSelected()\"\n [color]=\"colorViolet\"\n (valueChange)=\"neobrutalSelected.set($event)\"\n >\n <dd-segment-button value=\"rush\">{{\n 'segmentDoc.labels.rush' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"review\">{{\n 'segmentDoc.labels.review' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"drop\">{{\n 'segmentDoc.labels.drop' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal>\n <div class=\"state-hint state-hint--neobrutal\">\n <span>{{ 'segmentDoc.labels.selected' | transloco }}: </span>\n <b>{{ neobrutalSelected() }}</b>\n </div>\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.neobrutalOrange' | transloco }}</p>\n <duck-dev-segment-neobrutal [value]=\"'launch'\" [color]=\"colorOrange\">\n <dd-segment-button value=\"draft\">{{\n 'segmentDoc.labels.draft' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"launch\">{{\n 'segmentDoc.labels.launch' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"archive\">{{\n 'segmentDoc.labels.archive' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal>\n </div>\n </div>\n </div>\n </dd-card-section>\n</div>\n", styles: [".demo-container{max-width:1200px;margin:0 auto;padding:40px 20px}.demo-container h1{font-size:36px;font-weight:700;color:var(--dd-base-600);margin-bottom:40px;text-align:center;border-bottom:3px solid var(--dd-base-accent-blue);padding-bottom:20px}.demo-container h2{font-size:28px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;border-left:4px solid var(--dd-base-accent-blue);padding-left:15px}.demo-container .description{font-size:16px;line-height:1.6;color:var(--dd-base-400);margin-bottom:25px;padding:15px;background:var(--dd-base-100);border-radius:8px;border-left:3px solid var(--dd-base-300)}.demo-container h3{font-size:20px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;margin-top:25px}.demo-container .usage-block{margin-bottom:25px}.demo-container .usage-block pre{background:var(--dd-base-600);color:var(--dd-base-100);padding:20px;border-radius:8px;overflow-x:auto;margin:0}.demo-container .usage-block pre code{font-family:Courier New,Courier,monospace;font-size:14px;line-height:1.5}.demo-container .inputs-block{margin-bottom:25px}.demo-container .inputs-block ul{list-style:none;padding:0;margin:0}.demo-container .inputs-block ul li{padding:12px 15px;margin-bottom:8px;background:var(--dd-base-100);border-radius:6px;border-left:3px solid var(--dd-base-accent-blue);font-size:15px;line-height:1.5;color:var(--dd-base-500)}.demo-container .inputs-block ul li strong{color:var(--dd-base-accent-blue);font-weight:600}.demo-container .examples-block .example-row{display:flex;gap:20px;margin-bottom:20px;flex-wrap:wrap}.demo-container .examples-block .example-row .example-item{flex:1;min-width:280px;padding:20px;background:var(--dd-base-100);border-radius:8px;border:2px solid var(--dd-base-300);display:flex;flex-direction:column;align-items:stretch;gap:15px;transition:all .3s ease}.demo-container .examples-block .example-row .example-item:hover{border-color:var(--dd-base-accent-blue);box-shadow:0 4px 12px var(--dd-base-300)}.demo-container .examples-block .example-row .example-item .example-label{font-size:14px;font-weight:600;color:var(--dd-base-400);margin:0;text-align:left}.demo-container .examples-block .example-row .example-item .state-hint{font-size:14px;color:var(--dd-base-400)}.demo-container .examples-block .example-row .example-item .state-hint .divider{margin:0 8px;color:var(--dd-base-300)}.demo-container .examples-block .example-row .example-item.example-item--neobrutal{gap:18px;border-radius:0;border-width:3px;border-color:var(--dd-neo-ink);background:linear-gradient(135deg,color-mix(in srgb,var(--dd-base-accent-yellow) 18%,transparent) 0 14%,transparent 14% 100%),var(--dd-base-0);box-shadow:8px 8px 0 var(--dd-base-accent-blue)}.demo-container .examples-block .example-row .example-item .state-hint--neobrutal{display:inline-flex;width:fit-content;align-items:center;gap:8px;padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--dd-base-accent-yellow);color:var(--dd-base-600);font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase}@media(max-width:768px){.demo-container{padding:20px 15px}.demo-container h1{font-size:28px}.demo-container .examples-block .example-row{flex-direction:column}.demo-container .examples-block .example-row .example-item{min-width:100%}}\n"], dependencies: [{ kind: "component", type: DuckDevCardSection, selector: "dd-card-section" }, { kind: "component", type: DuckDevSegmentClassic, selector: "dd-segment-classic", inputs: ["value"], outputs: ["valueChange", "ionChange"] }, { kind: "component", type: DuckDevSegmentButton, selector: "dd-segment-button", inputs: ["value", "contentId"] }, { kind: "component", type: DuckDevSegmentNeobrutal, selector: "duck-dev-segment-neobrutal", inputs: ["value", "color"], outputs: ["valueChange", "ionChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
6216
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.1", type: SegmentBlock, isStandalone: true, selector: "app-segment-block", ngImport: i0, template: "<div class=\"demo-container\">\n <h1>{{ 'segmentDoc.title' | transloco }}</h1>\n\n <dd-card-section>\n <h2>{{ 'segmentDoc.basic.title' | transloco }}</h2>\n <p class=\"description\">{{ 'segmentDoc.basic.description' | transloco }}</p>\n\n <div class=\"usage-block\">\n <h3>{{ 'segmentDoc.basic.usage' | transloco }}</h3>\n <pre><code><dd-segment-classic [value]=\"selected\" (valueChange)=\"onChange($event)\">\n <dd-segment-button value=\"all\">All</dd-segment-button>\n <dd-segment-button value=\"articles\">Articles</dd-segment-button>\n <dd-segment-button value=\"videos\">Videos</dd-segment-button>\n</dd-segment-classic></code></pre>\n </div>\n\n <div class=\"inputs-block\">\n <h3>{{ 'segmentDoc.basic.inputs' | transloco }}</h3>\n <ul>\n <li><strong>value</strong> \u2014 {{ 'segmentDoc.inputsDesc.value' | transloco }}</li>\n <li>\n <strong>valueChange</strong> \u2014 {{ 'segmentDoc.inputsDesc.valueChange' | transloco }}\n </li>\n <li><strong>ionChange</strong> \u2014 {{ 'segmentDoc.inputsDesc.ionChange' | transloco }}</li>\n <li><strong>color</strong> \u2014 {{ 'segmentDoc.inputsDesc.color' | transloco }}</li>\n <li>\n <strong>dd-segment-button[value]</strong> \u2014\n {{ 'segmentDoc.inputsDesc.buttonValue' | transloco }}\n </li>\n <li>\n <strong>dd-segment-button</strong> \u2014\n {{ 'segmentDoc.inputsDesc.buttonContent' | transloco }}\n </li>\n </ul>\n </div>\n\n <div class=\"examples-block\">\n <h3>{{ 'segmentDoc.basic.examples' | transloco }}</h3>\n\n <div class=\"example-row\">\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.basic' | transloco }}</p>\n <dd-segment-classic>\n <dd-segment-button value=\"all\">{{\n 'segmentDoc.labels.all' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"articles\">{{\n 'segmentDoc.labels.articles' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"videos\">{{\n 'segmentDoc.labels.videos' | transloco\n }}</dd-segment-button>\n </dd-segment-classic>\n </div>\n\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.withBinding' | transloco }}</p>\n <dd-segment-classic\n [value]=\"selected()\"\n (valueChange)=\"selected.set($event)\"\n (ionChange)=\"onIonChange($event)\"\n >\n <dd-segment-button value=\"all\">{{\n 'segmentDoc.labels.all' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"articles\">{{\n 'segmentDoc.labels.articles' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"videos\">{{\n 'segmentDoc.labels.videos' | transloco\n }}</dd-segment-button>\n </dd-segment-classic>\n <div class=\"state-hint\">\n <span>{{ 'segmentDoc.labels.selected' | transloco }}: </span>\n <b>{{ selected() }}</b>\n <span class=\"divider\">|</span>\n <span\n >ionChange: <b>{{ lastEvent() }}</b></span\n >\n </div>\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.filters' | transloco }}</p>\n <dd-segment-classic [value]=\"'all'\">\n <dd-segment-button value=\"all\">{{\n 'segmentDoc.labels.all' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"articles\">{{\n 'segmentDoc.labels.articles' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"videos\">{{\n 'segmentDoc.labels.videos' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"photos\">{{\n 'segmentDoc.labels.photos' | transloco\n }}</dd-segment-button>\n </dd-segment-classic>\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.neobrutalViolet' | transloco }}</p>\n <duck-dev-segment-neobrutal\n [value]=\"neobrutalSelected()\"\n [color]=\"colorViolet\"\n (valueChange)=\"neobrutalSelected.set($event)\"\n >\n <dd-segment-button value=\"rush\">{{\n 'segmentDoc.labels.rush' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"review\">{{\n 'segmentDoc.labels.review' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"drop\">{{\n 'segmentDoc.labels.drop' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal>\n <div class=\"state-hint state-hint--neobrutal\">\n <span>{{ 'segmentDoc.labels.selected' | transloco }}: </span>\n <b>{{ neobrutalSelected() }}</b>\n </div>\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.neobrutalOrange' | transloco }}</p>\n <duck-dev-segment-neobrutal [value]=\"'launch'\" [color]=\"colorOrange\">\n <dd-segment-button value=\"draft\">{{\n 'segmentDoc.labels.draft' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"launch\">{{\n 'segmentDoc.labels.launch' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"archive\">{{\n 'segmentDoc.labels.archive' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal>\n </div>\n </div>\n\n <h3>{{ 'segmentDoc.vertical.title' | transloco }}</h3>\n <p class=\"description\">{{ 'segmentDoc.vertical.description' | transloco }}</p>\n\n <div class=\"example-row example-row--vertical\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.verticalDark' | transloco }}</p>\n <duck-dev-segment-neobrutal-vertical\n [value]=\"verticalSelected()\"\n [color]=\"colorDark\"\n (valueChange)=\"verticalSelected.set($event)\"\n >\n <dd-segment-button value=\"strategy\">{{\n 'segmentDoc.labels.strategy' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"research\">{{\n 'segmentDoc.labels.research' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"prototype\">{{\n 'segmentDoc.labels.prototype' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"validate\">{{\n 'segmentDoc.labels.validate' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal-vertical>\n <div class=\"state-hint state-hint--neobrutal\">\n <span>{{ 'segmentDoc.labels.selected' | transloco }}: </span>\n <b>{{ verticalSelected() }}</b>\n </div>\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.verticalViolet' | transloco }}</p>\n <duck-dev-segment-neobrutal-vertical [value]=\"'design'\" [color]=\"colorViolet\">\n <dd-segment-button value=\"discover\">{{\n 'segmentDoc.labels.discover' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"design\">{{\n 'segmentDoc.labels.design' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"develop\">{{\n 'segmentDoc.labels.develop' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"deliver\">{{\n 'segmentDoc.labels.deliver' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal-vertical>\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.verticalGray' | transloco }}</p>\n <duck-dev-segment-neobrutal-vertical [value]=\"'backlog'\" [color]=\"colorGray\">\n <dd-segment-button value=\"backlog\">{{\n 'segmentDoc.labels.backlog' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"inProgress\">{{\n 'segmentDoc.labels.inProgress' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"review\">{{\n 'segmentDoc.labels.review' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"done\">{{\n 'segmentDoc.labels.done' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal-vertical>\n </div>\n </div>\n </div>\n </dd-card-section>\n</div>\n", styles: [".demo-container{max-width:1200px;margin:0 auto;padding:40px 20px}.demo-container h1{font-size:36px;font-weight:700;color:var(--dd-base-600);margin-bottom:40px;text-align:center;border-bottom:3px solid var(--dd-base-accent-blue);padding-bottom:20px}.demo-container h2{font-size:28px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;border-left:4px solid var(--dd-base-accent-blue);padding-left:15px}.demo-container .description{font-size:16px;line-height:1.6;color:var(--dd-base-400);margin-bottom:25px;padding:15px;background:var(--dd-base-100);border-radius:8px;border-left:3px solid var(--dd-base-300)}.demo-container h3{font-size:20px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;margin-top:25px}.demo-container .usage-block{margin-bottom:25px}.demo-container .usage-block pre{background:var(--dd-base-600);color:var(--dd-base-100);padding:20px;border-radius:8px;overflow-x:auto;margin:0}.demo-container .usage-block pre code{font-family:Courier New,Courier,monospace;font-size:14px;line-height:1.5}.demo-container .inputs-block{margin-bottom:25px}.demo-container .inputs-block ul{list-style:none;padding:0;margin:0}.demo-container .inputs-block ul li{padding:12px 15px;margin-bottom:8px;background:var(--dd-base-100);border-radius:6px;border-left:3px solid var(--dd-base-accent-blue);font-size:15px;line-height:1.5;color:var(--dd-base-500)}.demo-container .inputs-block ul li strong{color:var(--dd-base-accent-blue);font-weight:600}.demo-container .examples-block .example-row{display:flex;gap:20px;margin-bottom:20px;flex-wrap:wrap}.demo-container .examples-block .example-row .example-item{flex:1;min-width:280px;padding:20px;background:var(--dd-base-100);border-radius:8px;border:2px solid var(--dd-base-300);display:flex;flex-direction:column;align-items:stretch;gap:15px;transition:all .3s ease}.demo-container .examples-block .example-row .example-item:hover{border-color:var(--dd-base-accent-blue);box-shadow:0 4px 12px var(--dd-base-300)}.demo-container .examples-block .example-row .example-item .example-label{font-size:14px;font-weight:600;color:var(--dd-base-400);margin:0;text-align:left}.demo-container .examples-block .example-row .example-item .state-hint{font-size:14px;color:var(--dd-base-400)}.demo-container .examples-block .example-row .example-item .state-hint .divider{margin:0 8px;color:var(--dd-base-300)}.demo-container .examples-block .example-row .example-item.example-item--neobrutal{gap:18px;border-radius:0;border-width:3px;border-color:var(--dd-neo-ink);background:linear-gradient(135deg,color-mix(in srgb,var(--dd-base-accent-yellow) 18%,transparent) 0 14%,transparent 14% 100%),var(--dd-base-0);box-shadow:8px 8px 0 var(--dd-base-accent-blue)}.demo-container .examples-block .example-row .example-item .state-hint--neobrutal{display:inline-flex;width:fit-content;align-items:center;gap:8px;padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--dd-base-accent-yellow);color:var(--dd-base-600);font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase}@media(max-width:768px){.demo-container{padding:20px 15px}.demo-container h1{font-size:28px}.demo-container .examples-block .example-row{flex-direction:column}.demo-container .examples-block .example-row .example-item{min-width:100%}}\n"], dependencies: [{ kind: "component", type: DuckDevCardSection, selector: "dd-card-section" }, { kind: "component", type: DuckDevSegmentClassic, selector: "dd-segment-classic", inputs: ["value"], outputs: ["valueChange", "ionChange"] }, { kind: "component", type: DuckDevSegmentButton, selector: "dd-segment-button", inputs: ["value", "contentId"] }, { kind: "component", type: DuckDevSegmentNeobrutal, selector: "duck-dev-segment-neobrutal", inputs: ["value", "color"], outputs: ["valueChange", "ionChange"] }, { kind: "component", type: DuckDevSegmentNeobrutalVertical, selector: "duck-dev-segment-neobrutal-vertical", inputs: ["value", "color"], outputs: ["valueChange", "ionChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
6078
6217
|
}
|
|
6079
6218
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: SegmentBlock, decorators: [{
|
|
6080
6219
|
type: Component,
|
|
@@ -6084,7 +6223,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
|
|
|
6084
6223
|
DuckDevSegmentClassic,
|
|
6085
6224
|
DuckDevSegmentButton,
|
|
6086
6225
|
DuckDevSegmentNeobrutal,
|
|
6087
|
-
|
|
6226
|
+
DuckDevSegmentNeobrutalVertical,
|
|
6227
|
+
], template: "<div class=\"demo-container\">\n <h1>{{ 'segmentDoc.title' | transloco }}</h1>\n\n <dd-card-section>\n <h2>{{ 'segmentDoc.basic.title' | transloco }}</h2>\n <p class=\"description\">{{ 'segmentDoc.basic.description' | transloco }}</p>\n\n <div class=\"usage-block\">\n <h3>{{ 'segmentDoc.basic.usage' | transloco }}</h3>\n <pre><code><dd-segment-classic [value]=\"selected\" (valueChange)=\"onChange($event)\">\n <dd-segment-button value=\"all\">All</dd-segment-button>\n <dd-segment-button value=\"articles\">Articles</dd-segment-button>\n <dd-segment-button value=\"videos\">Videos</dd-segment-button>\n</dd-segment-classic></code></pre>\n </div>\n\n <div class=\"inputs-block\">\n <h3>{{ 'segmentDoc.basic.inputs' | transloco }}</h3>\n <ul>\n <li><strong>value</strong> \u2014 {{ 'segmentDoc.inputsDesc.value' | transloco }}</li>\n <li>\n <strong>valueChange</strong> \u2014 {{ 'segmentDoc.inputsDesc.valueChange' | transloco }}\n </li>\n <li><strong>ionChange</strong> \u2014 {{ 'segmentDoc.inputsDesc.ionChange' | transloco }}</li>\n <li><strong>color</strong> \u2014 {{ 'segmentDoc.inputsDesc.color' | transloco }}</li>\n <li>\n <strong>dd-segment-button[value]</strong> \u2014\n {{ 'segmentDoc.inputsDesc.buttonValue' | transloco }}\n </li>\n <li>\n <strong>dd-segment-button</strong> \u2014\n {{ 'segmentDoc.inputsDesc.buttonContent' | transloco }}\n </li>\n </ul>\n </div>\n\n <div class=\"examples-block\">\n <h3>{{ 'segmentDoc.basic.examples' | transloco }}</h3>\n\n <div class=\"example-row\">\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.basic' | transloco }}</p>\n <dd-segment-classic>\n <dd-segment-button value=\"all\">{{\n 'segmentDoc.labels.all' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"articles\">{{\n 'segmentDoc.labels.articles' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"videos\">{{\n 'segmentDoc.labels.videos' | transloco\n }}</dd-segment-button>\n </dd-segment-classic>\n </div>\n\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.withBinding' | transloco }}</p>\n <dd-segment-classic\n [value]=\"selected()\"\n (valueChange)=\"selected.set($event)\"\n (ionChange)=\"onIonChange($event)\"\n >\n <dd-segment-button value=\"all\">{{\n 'segmentDoc.labels.all' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"articles\">{{\n 'segmentDoc.labels.articles' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"videos\">{{\n 'segmentDoc.labels.videos' | transloco\n }}</dd-segment-button>\n </dd-segment-classic>\n <div class=\"state-hint\">\n <span>{{ 'segmentDoc.labels.selected' | transloco }}: </span>\n <b>{{ selected() }}</b>\n <span class=\"divider\">|</span>\n <span\n >ionChange: <b>{{ lastEvent() }}</b></span\n >\n </div>\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.filters' | transloco }}</p>\n <dd-segment-classic [value]=\"'all'\">\n <dd-segment-button value=\"all\">{{\n 'segmentDoc.labels.all' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"articles\">{{\n 'segmentDoc.labels.articles' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"videos\">{{\n 'segmentDoc.labels.videos' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"photos\">{{\n 'segmentDoc.labels.photos' | transloco\n }}</dd-segment-button>\n </dd-segment-classic>\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.neobrutalViolet' | transloco }}</p>\n <duck-dev-segment-neobrutal\n [value]=\"neobrutalSelected()\"\n [color]=\"colorViolet\"\n (valueChange)=\"neobrutalSelected.set($event)\"\n >\n <dd-segment-button value=\"rush\">{{\n 'segmentDoc.labels.rush' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"review\">{{\n 'segmentDoc.labels.review' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"drop\">{{\n 'segmentDoc.labels.drop' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal>\n <div class=\"state-hint state-hint--neobrutal\">\n <span>{{ 'segmentDoc.labels.selected' | transloco }}: </span>\n <b>{{ neobrutalSelected() }}</b>\n </div>\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.neobrutalOrange' | transloco }}</p>\n <duck-dev-segment-neobrutal [value]=\"'launch'\" [color]=\"colorOrange\">\n <dd-segment-button value=\"draft\">{{\n 'segmentDoc.labels.draft' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"launch\">{{\n 'segmentDoc.labels.launch' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"archive\">{{\n 'segmentDoc.labels.archive' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal>\n </div>\n </div>\n\n <h3>{{ 'segmentDoc.vertical.title' | transloco }}</h3>\n <p class=\"description\">{{ 'segmentDoc.vertical.description' | transloco }}</p>\n\n <div class=\"example-row example-row--vertical\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.verticalDark' | transloco }}</p>\n <duck-dev-segment-neobrutal-vertical\n [value]=\"verticalSelected()\"\n [color]=\"colorDark\"\n (valueChange)=\"verticalSelected.set($event)\"\n >\n <dd-segment-button value=\"strategy\">{{\n 'segmentDoc.labels.strategy' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"research\">{{\n 'segmentDoc.labels.research' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"prototype\">{{\n 'segmentDoc.labels.prototype' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"validate\">{{\n 'segmentDoc.labels.validate' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal-vertical>\n <div class=\"state-hint state-hint--neobrutal\">\n <span>{{ 'segmentDoc.labels.selected' | transloco }}: </span>\n <b>{{ verticalSelected() }}</b>\n </div>\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.verticalViolet' | transloco }}</p>\n <duck-dev-segment-neobrutal-vertical [value]=\"'design'\" [color]=\"colorViolet\">\n <dd-segment-button value=\"discover\">{{\n 'segmentDoc.labels.discover' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"design\">{{\n 'segmentDoc.labels.design' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"develop\">{{\n 'segmentDoc.labels.develop' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"deliver\">{{\n 'segmentDoc.labels.deliver' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal-vertical>\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'segmentDoc.examples.verticalGray' | transloco }}</p>\n <duck-dev-segment-neobrutal-vertical [value]=\"'backlog'\" [color]=\"colorGray\">\n <dd-segment-button value=\"backlog\">{{\n 'segmentDoc.labels.backlog' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"inProgress\">{{\n 'segmentDoc.labels.inProgress' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"review\">{{\n 'segmentDoc.labels.review' | transloco\n }}</dd-segment-button>\n <dd-segment-button value=\"done\">{{\n 'segmentDoc.labels.done' | transloco\n }}</dd-segment-button>\n </duck-dev-segment-neobrutal-vertical>\n </div>\n </div>\n </div>\n </dd-card-section>\n</div>\n", styles: [".demo-container{max-width:1200px;margin:0 auto;padding:40px 20px}.demo-container h1{font-size:36px;font-weight:700;color:var(--dd-base-600);margin-bottom:40px;text-align:center;border-bottom:3px solid var(--dd-base-accent-blue);padding-bottom:20px}.demo-container h2{font-size:28px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;border-left:4px solid var(--dd-base-accent-blue);padding-left:15px}.demo-container .description{font-size:16px;line-height:1.6;color:var(--dd-base-400);margin-bottom:25px;padding:15px;background:var(--dd-base-100);border-radius:8px;border-left:3px solid var(--dd-base-300)}.demo-container h3{font-size:20px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;margin-top:25px}.demo-container .usage-block{margin-bottom:25px}.demo-container .usage-block pre{background:var(--dd-base-600);color:var(--dd-base-100);padding:20px;border-radius:8px;overflow-x:auto;margin:0}.demo-container .usage-block pre code{font-family:Courier New,Courier,monospace;font-size:14px;line-height:1.5}.demo-container .inputs-block{margin-bottom:25px}.demo-container .inputs-block ul{list-style:none;padding:0;margin:0}.demo-container .inputs-block ul li{padding:12px 15px;margin-bottom:8px;background:var(--dd-base-100);border-radius:6px;border-left:3px solid var(--dd-base-accent-blue);font-size:15px;line-height:1.5;color:var(--dd-base-500)}.demo-container .inputs-block ul li strong{color:var(--dd-base-accent-blue);font-weight:600}.demo-container .examples-block .example-row{display:flex;gap:20px;margin-bottom:20px;flex-wrap:wrap}.demo-container .examples-block .example-row .example-item{flex:1;min-width:280px;padding:20px;background:var(--dd-base-100);border-radius:8px;border:2px solid var(--dd-base-300);display:flex;flex-direction:column;align-items:stretch;gap:15px;transition:all .3s ease}.demo-container .examples-block .example-row .example-item:hover{border-color:var(--dd-base-accent-blue);box-shadow:0 4px 12px var(--dd-base-300)}.demo-container .examples-block .example-row .example-item .example-label{font-size:14px;font-weight:600;color:var(--dd-base-400);margin:0;text-align:left}.demo-container .examples-block .example-row .example-item .state-hint{font-size:14px;color:var(--dd-base-400)}.demo-container .examples-block .example-row .example-item .state-hint .divider{margin:0 8px;color:var(--dd-base-300)}.demo-container .examples-block .example-row .example-item.example-item--neobrutal{gap:18px;border-radius:0;border-width:3px;border-color:var(--dd-neo-ink);background:linear-gradient(135deg,color-mix(in srgb,var(--dd-base-accent-yellow) 18%,transparent) 0 14%,transparent 14% 100%),var(--dd-base-0);box-shadow:8px 8px 0 var(--dd-base-accent-blue)}.demo-container .examples-block .example-row .example-item .state-hint--neobrutal{display:inline-flex;width:fit-content;align-items:center;gap:8px;padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--dd-base-accent-yellow);color:var(--dd-base-600);font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase}@media(max-width:768px){.demo-container{padding:20px 15px}.demo-container h1{font-size:28px}.demo-container .examples-block .example-row{flex-direction:column}.demo-container .examples-block .example-row .example-item{min-width:100%}}\n"] }]
|
|
6088
6228
|
}] });
|
|
6089
6229
|
|
|
6090
6230
|
class ProgressBarBlock {
|
|
@@ -6190,11 +6330,53 @@ class DuckDevBreadcrumbNeobrutal {
|
|
|
6190
6330
|
color = input(AccentEnumColor.White, { ...(ngDevMode ? { debugName: "color" } : {}) });
|
|
6191
6331
|
isMobile = input(false, { ...(ngDevMode ? { debugName: "isMobile" } : {}), transform: booleanAttribute });
|
|
6192
6332
|
navigate = output();
|
|
6193
|
-
|
|
6194
|
-
|
|
6333
|
+
listRef = viewChild('listEl', { ...(ngDevMode ? { debugName: "listRef" } : {}) });
|
|
6334
|
+
visibleItems = computed(() => this.items(), { ...(ngDevMode ? { debugName: "visibleItems" } : {}) });
|
|
6195
6335
|
breadcrumbStyle = computed(() => this.getPalette(this.color()), { ...(ngDevMode ? { debugName: "breadcrumbStyle" } : {}) });
|
|
6196
6336
|
activePopoverIndex = signal(null, { ...(ngDevMode ? { debugName: "activePopoverIndex" } : {}) });
|
|
6337
|
+
isDragging = signal(false, { ...(ngDevMode ? { debugName: "isDragging" } : {}) });
|
|
6338
|
+
dragStartX = 0;
|
|
6339
|
+
scrollStartX = 0;
|
|
6340
|
+
hasDragged = false;
|
|
6341
|
+
destroyRef = inject(DestroyRef);
|
|
6342
|
+
onMouseMove = (e) => {
|
|
6343
|
+
const el = this.listRef()?.nativeElement;
|
|
6344
|
+
if (!el)
|
|
6345
|
+
return;
|
|
6346
|
+
e.preventDefault();
|
|
6347
|
+
const dx = e.clientX - this.dragStartX;
|
|
6348
|
+
el.scrollLeft = this.scrollStartX - dx;
|
|
6349
|
+
if (Math.abs(dx) > 3) {
|
|
6350
|
+
this.hasDragged = true;
|
|
6351
|
+
}
|
|
6352
|
+
};
|
|
6353
|
+
onMouseUp = () => {
|
|
6354
|
+
this.isDragging.set(false);
|
|
6355
|
+
document.removeEventListener('mousemove', this.onMouseMove);
|
|
6356
|
+
document.removeEventListener('mouseup', this.onMouseUp);
|
|
6357
|
+
};
|
|
6358
|
+
onListMouseDown(e) {
|
|
6359
|
+
const el = this.listRef()?.nativeElement;
|
|
6360
|
+
if (!el || el.scrollWidth <= el.clientWidth)
|
|
6361
|
+
return;
|
|
6362
|
+
this.isDragging.set(true);
|
|
6363
|
+
this.hasDragged = false;
|
|
6364
|
+
this.dragStartX = e.clientX;
|
|
6365
|
+
this.scrollStartX = el.scrollLeft;
|
|
6366
|
+
document.addEventListener('mousemove', this.onMouseMove);
|
|
6367
|
+
document.addEventListener('mouseup', this.onMouseUp);
|
|
6368
|
+
}
|
|
6369
|
+
constructor() {
|
|
6370
|
+
this.destroyRef.onDestroy(() => {
|
|
6371
|
+
document.removeEventListener('mousemove', this.onMouseMove);
|
|
6372
|
+
document.removeEventListener('mouseup', this.onMouseUp);
|
|
6373
|
+
});
|
|
6374
|
+
}
|
|
6197
6375
|
onNavigate(item, index) {
|
|
6376
|
+
if (this.hasDragged) {
|
|
6377
|
+
this.hasDragged = false;
|
|
6378
|
+
return;
|
|
6379
|
+
}
|
|
6198
6380
|
if (!this.isMobile()) {
|
|
6199
6381
|
this.navigate.emit(item);
|
|
6200
6382
|
return;
|
|
@@ -6269,12 +6451,12 @@ class DuckDevBreadcrumbNeobrutal {
|
|
|
6269
6451
|
}
|
|
6270
6452
|
}
|
|
6271
6453
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DuckDevBreadcrumbNeobrutal, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6272
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: DuckDevBreadcrumbNeobrutal, isStandalone: true, selector: "dd-breadcrumb-neobrutal", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { navigate: "navigate" }, ngImport: i0, template: "<nav\n class=\"neo-bc\"\n [class.neo-bc--mobile]=\"isMobile()\"\n
|
|
6454
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: DuckDevBreadcrumbNeobrutal, isStandalone: true, selector: "dd-breadcrumb-neobrutal", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { navigate: "navigate" }, viewQueries: [{ propertyName: "listRef", first: true, predicate: ["listEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<nav\n class=\"neo-bc\"\n [class.neo-bc--mobile]=\"isMobile()\"\n aria-label=\"Breadcrumb\"\n [ngStyle]=\"breadcrumbStyle()\"\n>\n <ol\n class=\"neo-bc__list\"\n #listEl\n [class.neo-bc__list--dragging]=\"isDragging()\"\n (mousedown)=\"onListMouseDown($event)\"\n >\n @for (item of visibleItems(); track $index; let last = $last) {\n <li\n class=\"neo-bc__item\"\n animate.enter=\"neo-bc__item--enter\"\n animate.leave=\"neo-bc__item--leave\"\n >\n @if (!last && item.url) {\n <button\n class=\"neo-bc__link\"\n [class.neo-bc__link--popover-open]=\"isPopoverOpen($index)\"\n type=\"button\"\n [attr.aria-label]=\"item.label\"\n (click)=\"onNavigate(item, $index)\"\n (keydown.escape)=\"closePopover()\"\n >\n <span class=\"neo-bc__chip\">\n <span class=\"neo-bc__label\">{{ item.label }}</span>\n </span>\n <span class=\"neo-bc__popover\" role=\"tooltip\">{{ item.label }}</span>\n </button>\n } @else {\n <span\n class=\"neo-bc__current\"\n [class.neo-bc__current--popover-open]=\"isPopoverOpen($index)\"\n tabindex=\"0\"\n [attr.aria-current]=\"last ? 'page' : null\"\n [attr.aria-label]=\"item.label\"\n (click)=\"onCurrentClick($index)\"\n (keydown.enter)=\"onCurrentClick($index)\"\n (keydown.space)=\"$event.preventDefault(); onCurrentClick($index)\"\n (keydown.escape)=\"closePopover()\"\n >\n <span class=\"neo-bc__chip neo-bc__chip--active\">\n <span class=\"neo-bc__label\">{{ item.label }}</span>\n </span>\n <span class=\"neo-bc__popover\" role=\"tooltip\">{{ item.label }}</span>\n </span>\n }\n <span\n class=\"neo-bc__arrow\"\n [class.neo-bc__arrow--visible]=\"!last\"\n aria-hidden=\"true\"\n ></span>\n </li>\n }\n </ol>\n</nav>\n", styles: [":root{--dd-appear-time: .5s;--dd-gray-0: #ffffff;--dd-gray-100: #f8f5f6;--dd-gray-200: #f2f4f5;--dd-gray-300: #eaeaea;--dd-gray-400: #999999;--dd-gray-500: #252525;--dd-gray-600: #121312;--dd-success: #a7ffb5ba;--dd-secondary: #6829ff;--dd-accent-orange: #fe7b20;--dd-orange-active: #e5350f;--dd-accent-pink: #fd6ca9;--dd-accent-yellow: #ffd027;--dd-accent-blue: #3254f3;--dd-base-0: var(--dd-gray-0);--dd-base-100: var(--dd-gray-100);--dd-base-200: var(--dd-gray-200);--dd-base-300: var(--dd-gray-300);--dd-base-400: var(--dd-gray-400);--dd-base-500: var(--dd-gray-500);--dd-base-600: var(--dd-gray-600);--dd-background: var(--dd-gray-200);--dd-base-success: var(--dd-success);--dd-base-secondary: var(--dd-secondary);--dd-base-accent-orange: var(--dd-accent-orange);--dd-base-active-orange: var(--dd-orange-active);--dd-base-accent-pink: var(--dd-accent-pink);--dd-base-accent-yellow: var(--dd-accent-yellow);--dd-base-accent-blue: var(--dd-accent-blue);--dd-neo-ink: var(--dd-gray-600);--dd-neo-paper: var(--dd-gray-0);--dd-neo-shadow: var(--dd-gray-600)}[ddTheme=dark]{--dd-base-0: var(--dd-gray-600);--dd-base-100: var(--dd-gray-500);--dd-base-200: var(--dd-gray-400);--dd-base-300: var(--dd-gray-300);--dd-base-400: var(--dd-gray-200);--dd-base-500: var(--dd-gray-100);--dd-base-600: var(--dd-gray-0);--dd-background: var(--dd-gray-500);--dd-base-accent-yellow: #934032;--dd-neo-ink: var(--dd-secondary);--dd-neo-paper: var(--dd-gray-600);--dd-neo-shadow: rgba(0, 0, 0, .55)}[ddTheme=violet]{--dd-base-50: var(--dd-magenta-500)}:host{display:block;box-sizing:border-box}.neo-bc{--neo-bc-row-height: 31px;--neo-bc-block-padding-y: 20px;--neo-bc-border-y: 6px;--neo-bc-arrow-gap: 8px;--neo-bc-arrow-top: 6px;--neo-bc-arrow-bottom: 6px;--neo-bc-arrow-left: 8px;--neo-bc-arrow-space: calc( var(--neo-bc-arrow-gap) + var(--neo-bc-arrow-left) + var(--neo-bc-arrow-gap) );display:block;width:100%;height:calc(var(--neo-bc-row-height) + var(--neo-bc-block-padding-y) + var(--neo-bc-border-y));box-sizing:border-box;padding:10px 14px;border:3px solid var(--dd-neo-ink);background:var(--neo-bc-surface);box-shadow:5px 5px 0 var(--neo-bc-shadow),5px 5px 0 3px var(--dd-neo-shadow);transition:padding .2s ease,box-shadow .2s ease}.neo-bc__list{display:flex;align-items:center;width:100%;height:100%;min-width:0;margin:0;padding:0;list-style:none;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:thin;cursor:grab}.neo-bc__list--dragging{cursor:grabbing;-webkit-user-select:none;user-select:none}.neo-bc__item{position:relative;display:flex;align-items:center;flex-shrink:0;min-width:0}.neo-bc__chip{display:flex;align-items:center;width:100%;min-width:0;max-width:100%;box-sizing:border-box;padding:5px 12px;border:2px solid var(--neo-bc-link);background:transparent;color:var(--neo-bc-link);font-size:.78rem;font-weight:900;line-height:1.1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:transform .16s ease,background .16s ease,box-shadow .16s ease}.neo-bc__label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.neo-bc__link{position:relative;display:flex;align-items:center;padding:0;border:none;background:transparent;font:inherit;cursor:pointer;touch-action:pan-x}.neo-bc__link:hover .neo-bc__chip{transform:translate(-1px,-1px);box-shadow:2px 2px 0 var(--dd-neo-shadow);background:color-mix(in srgb,var(--neo-bc-shadow) 14%,transparent)}.neo-bc__link:focus-visible .neo-bc__chip{outline:3px solid var(--neo-bc-link);outline-offset:1px}.neo-bc__current{position:relative;display:flex;align-items:center;touch-action:pan-x}.neo-bc__current:focus-visible .neo-bc__chip{outline:3px solid var(--neo-bc-link);outline-offset:1px}.neo-bc__chip--active{border-color:var(--dd-neo-ink);background:var(--neo-bc-separator);color:var(--neo-bc-active)}.neo-bc__arrow{display:inline-block;flex-shrink:0;width:0;height:0;margin-left:0;border-style:solid;border-width:0;border-color:transparent transparent transparent var(--neo-bc-separator);opacity:0;transform-origin:left center;transform:scaleX(.2);transition:margin-left .2s ease,border-width .2s ease,opacity .2s ease,transform .2s ease}.neo-bc__arrow--visible{margin-right:var(--neo-bc-arrow-gap);margin-left:var(--neo-bc-arrow-gap);border-width:var(--neo-bc-arrow-top) 0 var(--neo-bc-arrow-bottom) var(--neo-bc-arrow-left);opacity:1;transform:scaleX(1)}.neo-bc__popover{position:absolute;left:0;top:calc(100% + 6px);z-index:2;display:block;max-width:min(320px,100vw - 32px);padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--neo-bc-surface);box-shadow:3px 3px 0 var(--neo-bc-shadow),3px 3px 0 2px var(--dd-neo-shadow);color:var(--neo-bc-link);font-size:.72rem;font-weight:900;line-height:1.2;overflow-wrap:anywhere;text-transform:none;opacity:0;visibility:hidden;transform:translate(-2px,-2px);pointer-events:none;transition:opacity .14s ease,transform .14s ease,visibility .14s ease}.neo-bc:not(.neo-bc--mobile) .neo-bc__link:hover .neo-bc__popover,.neo-bc:not(.neo-bc--mobile) .neo-bc__link:focus .neo-bc__popover,.neo-bc:not(.neo-bc--mobile) .neo-bc__current:hover .neo-bc__popover,.neo-bc:not(.neo-bc--mobile) .neo-bc__current:focus .neo-bc__popover{opacity:1;visibility:visible;transform:translate(0)}.neo-bc__link--popover-open .neo-bc__popover,.neo-bc__current--popover-open .neo-bc__popover{opacity:1;visibility:visible;transform:translate(0)}@keyframes neo-bc-item-enter{0%{opacity:0;transform:scale(.96)}50%{opacity:.5}to{opacity:1;transform:scale(1)}}@keyframes neo-bc-item-leave{0%{opacity:1;transform:scale(1)}50%{opacity:0}to{opacity:0;transform:scale(.96)}}.neo-bc__item--enter{animation:neo-bc-item-enter .34s cubic-bezier(.16,1,.3,1) both}.neo-bc__item--leave{animation:neo-bc-item-leave .24s cubic-bezier(.4,0,1,1) both}@media(max-width:768px){.neo-bc{--neo-bc-row-height: 28px;--neo-bc-block-padding-y: 16px;--neo-bc-arrow-gap: 6px;--neo-bc-arrow-top: 5px;--neo-bc-arrow-bottom: 5px;--neo-bc-arrow-left: 7px;padding:8px 10px;box-shadow:4px 4px 0 var(--neo-bc-shadow),4px 4px 0 3px var(--dd-neo-shadow)}.neo-bc__chip{padding:4px 10px;font-size:.72rem}}@media(max-width:480px){.neo-bc{--neo-bc-border-y: 4px;--neo-bc-arrow-gap: 4px;--neo-bc-arrow-top: 4px;--neo-bc-arrow-bottom: 4px;--neo-bc-arrow-left: 6px;padding:8px;border-width:2px;box-shadow:3px 3px 0 var(--neo-bc-shadow),3px 3px 0 2px var(--dd-neo-shadow)}.neo-bc__chip{padding:5px 8px;border-width:2px;font-size:.68rem;letter-spacing:.05em}.neo-bc__popover{max-width:min(260px,100vw - 24px);font-size:.68rem}}@media(max-width:360px){.neo-bc{--neo-bc-row-height: 24px;--neo-bc-block-padding-y: 12px;--neo-bc-arrow-gap: 3px;--neo-bc-arrow-top: 3px;--neo-bc-arrow-bottom: 3px;--neo-bc-arrow-left: 5px;padding:6px}.neo-bc__chip{padding:4px 6px;font-size:.62rem;letter-spacing:.03em}}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
6273
6455
|
}
|
|
6274
6456
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DuckDevBreadcrumbNeobrutal, decorators: [{
|
|
6275
6457
|
type: Component,
|
|
6276
|
-
args: [{ selector: 'dd-breadcrumb-neobrutal', standalone: true, imports: [NgStyle], template: "<nav\n class=\"neo-bc\"\n [class.neo-bc--mobile]=\"isMobile()\"\n
|
|
6277
|
-
}], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], navigate: [{ type: i0.Output, args: ["navigate"] }] } });
|
|
6458
|
+
args: [{ selector: 'dd-breadcrumb-neobrutal', standalone: true, imports: [NgStyle], template: "<nav\n class=\"neo-bc\"\n [class.neo-bc--mobile]=\"isMobile()\"\n aria-label=\"Breadcrumb\"\n [ngStyle]=\"breadcrumbStyle()\"\n>\n <ol\n class=\"neo-bc__list\"\n #listEl\n [class.neo-bc__list--dragging]=\"isDragging()\"\n (mousedown)=\"onListMouseDown($event)\"\n >\n @for (item of visibleItems(); track $index; let last = $last) {\n <li\n class=\"neo-bc__item\"\n animate.enter=\"neo-bc__item--enter\"\n animate.leave=\"neo-bc__item--leave\"\n >\n @if (!last && item.url) {\n <button\n class=\"neo-bc__link\"\n [class.neo-bc__link--popover-open]=\"isPopoverOpen($index)\"\n type=\"button\"\n [attr.aria-label]=\"item.label\"\n (click)=\"onNavigate(item, $index)\"\n (keydown.escape)=\"closePopover()\"\n >\n <span class=\"neo-bc__chip\">\n <span class=\"neo-bc__label\">{{ item.label }}</span>\n </span>\n <span class=\"neo-bc__popover\" role=\"tooltip\">{{ item.label }}</span>\n </button>\n } @else {\n <span\n class=\"neo-bc__current\"\n [class.neo-bc__current--popover-open]=\"isPopoverOpen($index)\"\n tabindex=\"0\"\n [attr.aria-current]=\"last ? 'page' : null\"\n [attr.aria-label]=\"item.label\"\n (click)=\"onCurrentClick($index)\"\n (keydown.enter)=\"onCurrentClick($index)\"\n (keydown.space)=\"$event.preventDefault(); onCurrentClick($index)\"\n (keydown.escape)=\"closePopover()\"\n >\n <span class=\"neo-bc__chip neo-bc__chip--active\">\n <span class=\"neo-bc__label\">{{ item.label }}</span>\n </span>\n <span class=\"neo-bc__popover\" role=\"tooltip\">{{ item.label }}</span>\n </span>\n }\n <span\n class=\"neo-bc__arrow\"\n [class.neo-bc__arrow--visible]=\"!last\"\n aria-hidden=\"true\"\n ></span>\n </li>\n }\n </ol>\n</nav>\n", styles: [":root{--dd-appear-time: .5s;--dd-gray-0: #ffffff;--dd-gray-100: #f8f5f6;--dd-gray-200: #f2f4f5;--dd-gray-300: #eaeaea;--dd-gray-400: #999999;--dd-gray-500: #252525;--dd-gray-600: #121312;--dd-success: #a7ffb5ba;--dd-secondary: #6829ff;--dd-accent-orange: #fe7b20;--dd-orange-active: #e5350f;--dd-accent-pink: #fd6ca9;--dd-accent-yellow: #ffd027;--dd-accent-blue: #3254f3;--dd-base-0: var(--dd-gray-0);--dd-base-100: var(--dd-gray-100);--dd-base-200: var(--dd-gray-200);--dd-base-300: var(--dd-gray-300);--dd-base-400: var(--dd-gray-400);--dd-base-500: var(--dd-gray-500);--dd-base-600: var(--dd-gray-600);--dd-background: var(--dd-gray-200);--dd-base-success: var(--dd-success);--dd-base-secondary: var(--dd-secondary);--dd-base-accent-orange: var(--dd-accent-orange);--dd-base-active-orange: var(--dd-orange-active);--dd-base-accent-pink: var(--dd-accent-pink);--dd-base-accent-yellow: var(--dd-accent-yellow);--dd-base-accent-blue: var(--dd-accent-blue);--dd-neo-ink: var(--dd-gray-600);--dd-neo-paper: var(--dd-gray-0);--dd-neo-shadow: var(--dd-gray-600)}[ddTheme=dark]{--dd-base-0: var(--dd-gray-600);--dd-base-100: var(--dd-gray-500);--dd-base-200: var(--dd-gray-400);--dd-base-300: var(--dd-gray-300);--dd-base-400: var(--dd-gray-200);--dd-base-500: var(--dd-gray-100);--dd-base-600: var(--dd-gray-0);--dd-background: var(--dd-gray-500);--dd-base-accent-yellow: #934032;--dd-neo-ink: var(--dd-secondary);--dd-neo-paper: var(--dd-gray-600);--dd-neo-shadow: rgba(0, 0, 0, .55)}[ddTheme=violet]{--dd-base-50: var(--dd-magenta-500)}:host{display:block;box-sizing:border-box}.neo-bc{--neo-bc-row-height: 31px;--neo-bc-block-padding-y: 20px;--neo-bc-border-y: 6px;--neo-bc-arrow-gap: 8px;--neo-bc-arrow-top: 6px;--neo-bc-arrow-bottom: 6px;--neo-bc-arrow-left: 8px;--neo-bc-arrow-space: calc( var(--neo-bc-arrow-gap) + var(--neo-bc-arrow-left) + var(--neo-bc-arrow-gap) );display:block;width:100%;height:calc(var(--neo-bc-row-height) + var(--neo-bc-block-padding-y) + var(--neo-bc-border-y));box-sizing:border-box;padding:10px 14px;border:3px solid var(--dd-neo-ink);background:var(--neo-bc-surface);box-shadow:5px 5px 0 var(--neo-bc-shadow),5px 5px 0 3px var(--dd-neo-shadow);transition:padding .2s ease,box-shadow .2s ease}.neo-bc__list{display:flex;align-items:center;width:100%;height:100%;min-width:0;margin:0;padding:0;list-style:none;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:thin;cursor:grab}.neo-bc__list--dragging{cursor:grabbing;-webkit-user-select:none;user-select:none}.neo-bc__item{position:relative;display:flex;align-items:center;flex-shrink:0;min-width:0}.neo-bc__chip{display:flex;align-items:center;width:100%;min-width:0;max-width:100%;box-sizing:border-box;padding:5px 12px;border:2px solid var(--neo-bc-link);background:transparent;color:var(--neo-bc-link);font-size:.78rem;font-weight:900;line-height:1.1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:transform .16s ease,background .16s ease,box-shadow .16s ease}.neo-bc__label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.neo-bc__link{position:relative;display:flex;align-items:center;padding:0;border:none;background:transparent;font:inherit;cursor:pointer;touch-action:pan-x}.neo-bc__link:hover .neo-bc__chip{transform:translate(-1px,-1px);box-shadow:2px 2px 0 var(--dd-neo-shadow);background:color-mix(in srgb,var(--neo-bc-shadow) 14%,transparent)}.neo-bc__link:focus-visible .neo-bc__chip{outline:3px solid var(--neo-bc-link);outline-offset:1px}.neo-bc__current{position:relative;display:flex;align-items:center;touch-action:pan-x}.neo-bc__current:focus-visible .neo-bc__chip{outline:3px solid var(--neo-bc-link);outline-offset:1px}.neo-bc__chip--active{border-color:var(--dd-neo-ink);background:var(--neo-bc-separator);color:var(--neo-bc-active)}.neo-bc__arrow{display:inline-block;flex-shrink:0;width:0;height:0;margin-left:0;border-style:solid;border-width:0;border-color:transparent transparent transparent var(--neo-bc-separator);opacity:0;transform-origin:left center;transform:scaleX(.2);transition:margin-left .2s ease,border-width .2s ease,opacity .2s ease,transform .2s ease}.neo-bc__arrow--visible{margin-right:var(--neo-bc-arrow-gap);margin-left:var(--neo-bc-arrow-gap);border-width:var(--neo-bc-arrow-top) 0 var(--neo-bc-arrow-bottom) var(--neo-bc-arrow-left);opacity:1;transform:scaleX(1)}.neo-bc__popover{position:absolute;left:0;top:calc(100% + 6px);z-index:2;display:block;max-width:min(320px,100vw - 32px);padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--neo-bc-surface);box-shadow:3px 3px 0 var(--neo-bc-shadow),3px 3px 0 2px var(--dd-neo-shadow);color:var(--neo-bc-link);font-size:.72rem;font-weight:900;line-height:1.2;overflow-wrap:anywhere;text-transform:none;opacity:0;visibility:hidden;transform:translate(-2px,-2px);pointer-events:none;transition:opacity .14s ease,transform .14s ease,visibility .14s ease}.neo-bc:not(.neo-bc--mobile) .neo-bc__link:hover .neo-bc__popover,.neo-bc:not(.neo-bc--mobile) .neo-bc__link:focus .neo-bc__popover,.neo-bc:not(.neo-bc--mobile) .neo-bc__current:hover .neo-bc__popover,.neo-bc:not(.neo-bc--mobile) .neo-bc__current:focus .neo-bc__popover{opacity:1;visibility:visible;transform:translate(0)}.neo-bc__link--popover-open .neo-bc__popover,.neo-bc__current--popover-open .neo-bc__popover{opacity:1;visibility:visible;transform:translate(0)}@keyframes neo-bc-item-enter{0%{opacity:0;transform:scale(.96)}50%{opacity:.5}to{opacity:1;transform:scale(1)}}@keyframes neo-bc-item-leave{0%{opacity:1;transform:scale(1)}50%{opacity:0}to{opacity:0;transform:scale(.96)}}.neo-bc__item--enter{animation:neo-bc-item-enter .34s cubic-bezier(.16,1,.3,1) both}.neo-bc__item--leave{animation:neo-bc-item-leave .24s cubic-bezier(.4,0,1,1) both}@media(max-width:768px){.neo-bc{--neo-bc-row-height: 28px;--neo-bc-block-padding-y: 16px;--neo-bc-arrow-gap: 6px;--neo-bc-arrow-top: 5px;--neo-bc-arrow-bottom: 5px;--neo-bc-arrow-left: 7px;padding:8px 10px;box-shadow:4px 4px 0 var(--neo-bc-shadow),4px 4px 0 3px var(--dd-neo-shadow)}.neo-bc__chip{padding:4px 10px;font-size:.72rem}}@media(max-width:480px){.neo-bc{--neo-bc-border-y: 4px;--neo-bc-arrow-gap: 4px;--neo-bc-arrow-top: 4px;--neo-bc-arrow-bottom: 4px;--neo-bc-arrow-left: 6px;padding:8px;border-width:2px;box-shadow:3px 3px 0 var(--neo-bc-shadow),3px 3px 0 2px var(--dd-neo-shadow)}.neo-bc__chip{padding:5px 8px;border-width:2px;font-size:.68rem;letter-spacing:.05em}.neo-bc__popover{max-width:min(260px,100vw - 24px);font-size:.68rem}}@media(max-width:360px){.neo-bc{--neo-bc-row-height: 24px;--neo-bc-block-padding-y: 12px;--neo-bc-arrow-gap: 3px;--neo-bc-arrow-top: 3px;--neo-bc-arrow-bottom: 3px;--neo-bc-arrow-left: 5px;padding:6px}.neo-bc__chip{padding:4px 6px;font-size:.62rem;letter-spacing:.03em}}\n"] }]
|
|
6459
|
+
}], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], isMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMobile", required: false }] }], navigate: [{ type: i0.Output, args: ["navigate"] }], listRef: [{ type: i0.ViewChild, args: ['listEl', { isSignal: true }] }] } });
|
|
6278
6460
|
|
|
6279
6461
|
class BreadcrumbBlock {
|
|
6280
6462
|
colorViolet = AccentEnumColor.Violet;
|
|
@@ -6292,12 +6474,35 @@ class BreadcrumbBlock {
|
|
|
6292
6474
|
{ label: 'Navigation', url: '/navigation' },
|
|
6293
6475
|
{ label: 'Breadcrumb' },
|
|
6294
6476
|
];
|
|
6477
|
+
sampleLabels = [
|
|
6478
|
+
'Settings', 'Profile', 'Dashboard', 'Analytics', 'Reports', 'Users', 'Permissions',
|
|
6479
|
+
];
|
|
6480
|
+
interactiveItems = signal([
|
|
6481
|
+
{ label: 'Home', url: '/' },
|
|
6482
|
+
{ label: 'Components', url: '/components' },
|
|
6483
|
+
{ label: 'Breadcrumb' },
|
|
6484
|
+
], { ...(ngDevMode ? { debugName: "interactiveItems" } : {}) });
|
|
6295
6485
|
lastNavigated = signal('', { ...(ngDevMode ? { debugName: "lastNavigated" } : {}) });
|
|
6296
6486
|
onNavigate(item) {
|
|
6297
6487
|
this.lastNavigated.set(item.label);
|
|
6298
6488
|
}
|
|
6489
|
+
addBreadcrumb() {
|
|
6490
|
+
const current = this.interactiveItems();
|
|
6491
|
+
const label = this.sampleLabels[current.length % this.sampleLabels.length];
|
|
6492
|
+
const updated = current.map(item => ({ ...item, url: item.url || `/${item.label.toLowerCase()}` }));
|
|
6493
|
+
updated.push({ label });
|
|
6494
|
+
this.interactiveItems.set(updated);
|
|
6495
|
+
}
|
|
6496
|
+
removeBreadcrumb() {
|
|
6497
|
+
const current = this.interactiveItems();
|
|
6498
|
+
if (current.length <= 1)
|
|
6499
|
+
return;
|
|
6500
|
+
const updated = current.slice(0, -1);
|
|
6501
|
+
updated[updated.length - 1] = { label: updated[updated.length - 1].label };
|
|
6502
|
+
this.interactiveItems.set(updated);
|
|
6503
|
+
}
|
|
6299
6504
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: BreadcrumbBlock, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6300
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: BreadcrumbBlock, isStandalone: true, selector: "app-breadcrumb-block", ngImport: i0, template: "<div class=\"demo-container\">\n <h1>{{ 'breadcrumbDoc.title' | transloco }}</h1>\n\n <dd-card-section>\n <h2>{{ 'breadcrumbDoc.basic.title' | transloco }}</h2>\n <p class=\"description\">{{ 'breadcrumbDoc.basic.description' | transloco }}</p>\n\n <div class=\"usage-block\">\n <h3>{{ 'breadcrumbDoc.basic.usage' | transloco }}</h3>\n <pre><code><dd-breadcrumb-classic\n [items]=\"breadcrumbs\"\n (navigate)=\"onNavigate($event)\"\n/>\n\n<dd-breadcrumb-neobrutal\n [items]=\"breadcrumbs\"\n [color]=\"colorViolet\"\n (navigate)=\"onNavigate($event)\"\n/></code></pre>\n </div>\n\n <div class=\"inputs-block\">\n <h3>{{ 'breadcrumbDoc.basic.inputs' | transloco }}</h3>\n <ul>\n <li><strong>items</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.items' | transloco }}</li>\n <li><strong>separator</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.separator' | transloco }}</li>\n <li><strong>color</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.color' | transloco }}</li>\n <li><strong>navigate</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.navigate' | transloco }}</li>\n </ul>\n </div>\n\n <div class=\"examples-block\">\n <h3>{{ 'breadcrumbDoc.basic.examples' | transloco }}</h3>\n\n <div class=\"example-row\">\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.classic' | transloco }}</p>\n <dd-breadcrumb-classic [items]=\"basicItems\" (navigate)=\"onNavigate($event)\" />\n </div>\n\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.classicLong' | transloco }}</p>\n <dd-breadcrumb-classic\n [items]=\"longItems\"\n separator=\">\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalWhite' | transloco }}</p>\n <dd-breadcrumb-neobrutal [items]=\"basicItems\" (navigate)=\"onNavigate($event)\" />\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalViolet' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"basicItems\"\n [color]=\"colorViolet\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalOrange' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"longItems\"\n [color]=\"colorOrange\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalDark' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"basicItems\"\n [color]=\"colorDark\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n @if (lastNavigated()) {\n <div class=\"state-hint state-hint--neobrutal\">\n <span>{{ 'breadcrumbDoc.labels.navigated' | transloco }}: </span>\n <b>{{ lastNavigated() }}</b>\n </div>\n }\n </div>\n </dd-card-section>\n</div>\n", styles: [".demo-container{max-width:1200px;margin:0 auto;padding:40px 20px}.demo-container h1{font-size:36px;font-weight:700;color:var(--dd-base-600);margin-bottom:40px;text-align:center;border-bottom:3px solid var(--dd-base-accent-blue);padding-bottom:20px}.demo-container h2{font-size:28px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;border-left:4px solid var(--dd-base-accent-blue);padding-left:15px}.demo-container .description{font-size:16px;line-height:1.6;color:var(--dd-base-400);margin-bottom:25px;padding:15px;background:var(--dd-base-100);border-radius:8px;border-left:3px solid var(--dd-base-300)}.demo-container h3{font-size:20px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;margin-top:25px}.demo-container .usage-block{margin-bottom:25px}.demo-container .usage-block pre{background:var(--dd-base-600);color:var(--dd-base-100);padding:20px;border-radius:8px;overflow-x:auto;margin:0}.demo-container .usage-block pre code{font-family:Courier New,Courier,monospace;font-size:14px;line-height:1.5}.demo-container .inputs-block{margin-bottom:25px}.demo-container .inputs-block ul{list-style:none;padding:0;margin:0}.demo-container .inputs-block ul li{padding:12px 15px;margin-bottom:8px;background:var(--dd-base-100);border-radius:6px;border-left:3px solid var(--dd-base-accent-blue);font-size:15px;line-height:1.5;color:var(--dd-base-500)}.demo-container .inputs-block ul li strong{color:var(--dd-base-accent-blue);font-weight:600}.demo-container .examples-block .example-row{display:flex;gap:20px;margin-bottom:20px;flex-wrap:wrap}.demo-container .examples-block .example-row .example-item{flex:1;min-width:280px;padding:20px;background:var(--dd-base-100);border-radius:8px;border:2px solid var(--dd-base-300);display:flex;flex-direction:column;gap:15px;transition:all .3s ease}.demo-container .examples-block .example-row .example-item:hover{border-color:var(--dd-base-accent-blue);box-shadow:0 4px 12px var(--dd-base-300)}.demo-container .examples-block .example-row .example-item .example-label{font-size:14px;font-weight:600;color:var(--dd-base-400);margin:0;text-align:left}.demo-container .examples-block .example-row .example-item.example-item--neobrutal{gap:18px;border-radius:0;border-width:3px;border-color:var(--dd-neo-ink);background:linear-gradient(135deg,color-mix(in srgb,var(--dd-base-accent-yellow) 18%,transparent) 0 14%,transparent 14% 100%),var(--dd-base-0);box-shadow:8px 8px 0 var(--dd-base-accent-blue)}.demo-container .examples-block .state-hint--neobrutal{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--dd-base-accent-yellow);color:var(--dd-base-600);font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase}@media(max-width:768px){.demo-container{padding:20px 15px}.demo-container h1{font-size:28px}.demo-container .examples-block .example-row{flex-direction:column}.demo-container .examples-block .example-row .example-item{min-width:100%}}\n"], dependencies: [{ kind: "component", type: DuckDevCardSection, selector: "dd-card-section" }, { kind: "component", type: DuckDevBreadcrumbClassic, selector: "dd-breadcrumb-classic", inputs: ["items", "separator"], outputs: ["navigate"] }, { kind: "component", type: DuckDevBreadcrumbNeobrutal, selector: "dd-breadcrumb-neobrutal", inputs: ["items", "color", "isMobile"], outputs: ["navigate"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
6505
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: BreadcrumbBlock, isStandalone: true, selector: "app-breadcrumb-block", ngImport: i0, template: "<div class=\"demo-container\">\n <h1>{{ 'breadcrumbDoc.title' | transloco }}</h1>\n\n <dd-card-section>\n <h2>{{ 'breadcrumbDoc.basic.title' | transloco }}</h2>\n <p class=\"description\">{{ 'breadcrumbDoc.basic.description' | transloco }}</p>\n\n <div class=\"usage-block\">\n <h3>{{ 'breadcrumbDoc.basic.usage' | transloco }}</h3>\n <pre><code><dd-breadcrumb-classic\n [items]=\"breadcrumbs\"\n (navigate)=\"onNavigate($event)\"\n/>\n\n<dd-breadcrumb-neobrutal\n [items]=\"breadcrumbs\"\n [color]=\"colorViolet\"\n (navigate)=\"onNavigate($event)\"\n/></code></pre>\n </div>\n\n <div class=\"inputs-block\">\n <h3>{{ 'breadcrumbDoc.basic.inputs' | transloco }}</h3>\n <ul>\n <li><strong>items</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.items' | transloco }}</li>\n <li><strong>separator</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.separator' | transloco }}</li>\n <li><strong>color</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.color' | transloco }}</li>\n <li><strong>navigate</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.navigate' | transloco }}</li>\n </ul>\n </div>\n\n <div class=\"examples-block\">\n <h3>{{ 'breadcrumbDoc.basic.examples' | transloco }}</h3>\n\n <div class=\"example-row\">\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.classic' | transloco }}</p>\n <dd-breadcrumb-classic [items]=\"basicItems\" (navigate)=\"onNavigate($event)\" />\n </div>\n\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.classicLong' | transloco }}</p>\n <dd-breadcrumb-classic\n [items]=\"longItems\"\n separator=\">\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalWhite' | transloco }}</p>\n <dd-breadcrumb-neobrutal [items]=\"basicItems\" (navigate)=\"onNavigate($event)\" />\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalViolet' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"basicItems\"\n [color]=\"colorViolet\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalOrange' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"longItems\"\n [color]=\"colorOrange\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalDark' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"basicItems\"\n [color]=\"colorDark\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n @if (lastNavigated()) {\n <div class=\"state-hint state-hint--neobrutal\">\n <span>{{ 'breadcrumbDoc.labels.navigated' | transloco }}: </span>\n <b>{{ lastNavigated() }}</b>\n </div>\n }\n </div>\n </dd-card-section>\n\n <dd-card-section>\n <h2>{{ 'breadcrumbDoc.interactive.title' | transloco }}</h2>\n <p class=\"description\">{{ 'breadcrumbDoc.interactive.description' | transloco }}</p>\n\n <div class=\"interactive-controls\">\n <button class=\"interactive-btn interactive-btn--add\" type=\"button\" (click)=\"addBreadcrumb()\">\n + {{ 'breadcrumbDoc.interactive.add' | transloco }}\n </button>\n <button\n class=\"interactive-btn interactive-btn--remove\"\n type=\"button\"\n [disabled]=\"interactiveItems().length <= 1\"\n (click)=\"removeBreadcrumb()\"\n >\n \u2212 {{ 'breadcrumbDoc.interactive.remove' | transloco }}\n </button>\n <span class=\"interactive-count\">\n {{ 'breadcrumbDoc.interactive.count' | transloco }}: {{ interactiveItems().length }}\n </span>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal example-item--wide\">\n <dd-breadcrumb-neobrutal\n [items]=\"interactiveItems()\"\n [color]=\"colorViolet\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n </dd-card-section>\n</div>\n", styles: [".demo-container{max-width:1200px;margin:0 auto;padding:40px 20px}.demo-container h1{font-size:36px;font-weight:700;color:var(--dd-base-600);margin-bottom:40px;text-align:center;border-bottom:3px solid var(--dd-base-accent-blue);padding-bottom:20px}.demo-container h2{font-size:28px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;border-left:4px solid var(--dd-base-accent-blue);padding-left:15px}.demo-container .description{font-size:16px;line-height:1.6;color:var(--dd-base-400);margin-bottom:25px;padding:15px;background:var(--dd-base-100);border-radius:8px;border-left:3px solid var(--dd-base-300)}.demo-container h3{font-size:20px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;margin-top:25px}.demo-container .usage-block{margin-bottom:25px}.demo-container .usage-block pre{background:var(--dd-base-600);color:var(--dd-base-100);padding:20px;border-radius:8px;overflow-x:auto;margin:0}.demo-container .usage-block pre code{font-family:Courier New,Courier,monospace;font-size:14px;line-height:1.5}.demo-container .inputs-block{margin-bottom:25px}.demo-container .inputs-block ul{list-style:none;padding:0;margin:0}.demo-container .inputs-block ul li{padding:12px 15px;margin-bottom:8px;background:var(--dd-base-100);border-radius:6px;border-left:3px solid var(--dd-base-accent-blue);font-size:15px;line-height:1.5;color:var(--dd-base-500)}.demo-container .inputs-block ul li strong{color:var(--dd-base-accent-blue);font-weight:600}.demo-container .examples-block .example-row{display:flex;gap:20px;margin-bottom:20px;flex-wrap:wrap}.demo-container .examples-block .example-row .example-item{flex:1;min-width:280px;padding:20px;background:var(--dd-base-100);border-radius:8px;border:2px solid var(--dd-base-300);display:flex;flex-direction:column;gap:15px;transition:all .3s ease}.demo-container .examples-block .example-row .example-item:hover{border-color:var(--dd-base-accent-blue);box-shadow:0 4px 12px var(--dd-base-300)}.demo-container .examples-block .example-row .example-item .example-label{font-size:14px;font-weight:600;color:var(--dd-base-400);margin:0;text-align:left}.demo-container .examples-block .example-row .example-item.example-item--neobrutal{gap:18px;border-radius:0;border-width:3px;border-color:var(--dd-neo-ink);background:linear-gradient(135deg,color-mix(in srgb,var(--dd-base-accent-yellow) 18%,transparent) 0 14%,transparent 14% 100%),var(--dd-base-0);box-shadow:8px 8px 0 var(--dd-base-accent-blue)}.demo-container .examples-block .state-hint--neobrutal{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--dd-base-accent-yellow);color:var(--dd-base-600);font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase}.demo-container .interactive-controls{display:flex;align-items:center;gap:12px;margin-bottom:20px;flex-wrap:wrap}.demo-container .interactive-btn{padding:8px 16px;border:3px solid var(--dd-neo-ink);font-size:14px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;cursor:pointer;transition:transform .12s ease,box-shadow .12s ease}.demo-container .interactive-btn:hover:not(:disabled){transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--dd-neo-ink)}.demo-container .interactive-btn:disabled{opacity:.4;cursor:not-allowed}.demo-container .interactive-btn--add{background:var(--dd-base-accent-blue);color:var(--dd-base-0)}.demo-container .interactive-btn--remove{background:var(--dd-base-accent-pink);color:var(--dd-base-0)}.demo-container .interactive-count{padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--dd-base-accent-yellow);color:var(--dd-base-600);font-size:12px;font-weight:900;letter-spacing:.08em;text-transform:uppercase}.demo-container .example-item--wide{flex:1 1 100%;min-width:100%}@media(max-width:768px){.demo-container{padding:20px 15px}.demo-container h1{font-size:28px}.demo-container .examples-block .example-row{flex-direction:column}.demo-container .examples-block .example-row .example-item{min-width:100%}}\n"], dependencies: [{ kind: "component", type: DuckDevCardSection, selector: "dd-card-section" }, { kind: "component", type: DuckDevBreadcrumbClassic, selector: "dd-breadcrumb-classic", inputs: ["items", "separator"], outputs: ["navigate"] }, { kind: "component", type: DuckDevBreadcrumbNeobrutal, selector: "dd-breadcrumb-neobrutal", inputs: ["items", "color", "isMobile"], outputs: ["navigate"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
6301
6506
|
}
|
|
6302
6507
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: BreadcrumbBlock, decorators: [{
|
|
6303
6508
|
type: Component,
|
|
@@ -6306,7 +6511,290 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
|
|
|
6306
6511
|
DuckDevCardSection,
|
|
6307
6512
|
DuckDevBreadcrumbClassic,
|
|
6308
6513
|
DuckDevBreadcrumbNeobrutal,
|
|
6309
|
-
], template: "<div class=\"demo-container\">\n <h1>{{ 'breadcrumbDoc.title' | transloco }}</h1>\n\n <dd-card-section>\n <h2>{{ 'breadcrumbDoc.basic.title' | transloco }}</h2>\n <p class=\"description\">{{ 'breadcrumbDoc.basic.description' | transloco }}</p>\n\n <div class=\"usage-block\">\n <h3>{{ 'breadcrumbDoc.basic.usage' | transloco }}</h3>\n <pre><code><dd-breadcrumb-classic\n [items]=\"breadcrumbs\"\n (navigate)=\"onNavigate($event)\"\n/>\n\n<dd-breadcrumb-neobrutal\n [items]=\"breadcrumbs\"\n [color]=\"colorViolet\"\n (navigate)=\"onNavigate($event)\"\n/></code></pre>\n </div>\n\n <div class=\"inputs-block\">\n <h3>{{ 'breadcrumbDoc.basic.inputs' | transloco }}</h3>\n <ul>\n <li><strong>items</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.items' | transloco }}</li>\n <li><strong>separator</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.separator' | transloco }}</li>\n <li><strong>color</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.color' | transloco }}</li>\n <li><strong>navigate</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.navigate' | transloco }}</li>\n </ul>\n </div>\n\n <div class=\"examples-block\">\n <h3>{{ 'breadcrumbDoc.basic.examples' | transloco }}</h3>\n\n <div class=\"example-row\">\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.classic' | transloco }}</p>\n <dd-breadcrumb-classic [items]=\"basicItems\" (navigate)=\"onNavigate($event)\" />\n </div>\n\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.classicLong' | transloco }}</p>\n <dd-breadcrumb-classic\n [items]=\"longItems\"\n separator=\">\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalWhite' | transloco }}</p>\n <dd-breadcrumb-neobrutal [items]=\"basicItems\" (navigate)=\"onNavigate($event)\" />\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalViolet' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"basicItems\"\n [color]=\"colorViolet\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalOrange' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"longItems\"\n [color]=\"colorOrange\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalDark' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"basicItems\"\n [color]=\"colorDark\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n @if (lastNavigated()) {\n <div class=\"state-hint state-hint--neobrutal\">\n <span>{{ 'breadcrumbDoc.labels.navigated' | transloco }}: </span>\n <b>{{ lastNavigated() }}</b>\n </div>\n }\n </div>\n </dd-card-section>\n</div>\n", styles: [".demo-container{max-width:1200px;margin:0 auto;padding:40px 20px}.demo-container h1{font-size:36px;font-weight:700;color:var(--dd-base-600);margin-bottom:40px;text-align:center;border-bottom:3px solid var(--dd-base-accent-blue);padding-bottom:20px}.demo-container h2{font-size:28px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;border-left:4px solid var(--dd-base-accent-blue);padding-left:15px}.demo-container .description{font-size:16px;line-height:1.6;color:var(--dd-base-400);margin-bottom:25px;padding:15px;background:var(--dd-base-100);border-radius:8px;border-left:3px solid var(--dd-base-300)}.demo-container h3{font-size:20px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;margin-top:25px}.demo-container .usage-block{margin-bottom:25px}.demo-container .usage-block pre{background:var(--dd-base-600);color:var(--dd-base-100);padding:20px;border-radius:8px;overflow-x:auto;margin:0}.demo-container .usage-block pre code{font-family:Courier New,Courier,monospace;font-size:14px;line-height:1.5}.demo-container .inputs-block{margin-bottom:25px}.demo-container .inputs-block ul{list-style:none;padding:0;margin:0}.demo-container .inputs-block ul li{padding:12px 15px;margin-bottom:8px;background:var(--dd-base-100);border-radius:6px;border-left:3px solid var(--dd-base-accent-blue);font-size:15px;line-height:1.5;color:var(--dd-base-500)}.demo-container .inputs-block ul li strong{color:var(--dd-base-accent-blue);font-weight:600}.demo-container .examples-block .example-row{display:flex;gap:20px;margin-bottom:20px;flex-wrap:wrap}.demo-container .examples-block .example-row .example-item{flex:1;min-width:280px;padding:20px;background:var(--dd-base-100);border-radius:8px;border:2px solid var(--dd-base-300);display:flex;flex-direction:column;gap:15px;transition:all .3s ease}.demo-container .examples-block .example-row .example-item:hover{border-color:var(--dd-base-accent-blue);box-shadow:0 4px 12px var(--dd-base-300)}.demo-container .examples-block .example-row .example-item .example-label{font-size:14px;font-weight:600;color:var(--dd-base-400);margin:0;text-align:left}.demo-container .examples-block .example-row .example-item.example-item--neobrutal{gap:18px;border-radius:0;border-width:3px;border-color:var(--dd-neo-ink);background:linear-gradient(135deg,color-mix(in srgb,var(--dd-base-accent-yellow) 18%,transparent) 0 14%,transparent 14% 100%),var(--dd-base-0);box-shadow:8px 8px 0 var(--dd-base-accent-blue)}.demo-container .examples-block .state-hint--neobrutal{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--dd-base-accent-yellow);color:var(--dd-base-600);font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase}@media(max-width:768px){.demo-container{padding:20px 15px}.demo-container h1{font-size:28px}.demo-container .examples-block .example-row{flex-direction:column}.demo-container .examples-block .example-row .example-item{min-width:100%}}\n"] }]
|
|
6514
|
+
], template: "<div class=\"demo-container\">\n <h1>{{ 'breadcrumbDoc.title' | transloco }}</h1>\n\n <dd-card-section>\n <h2>{{ 'breadcrumbDoc.basic.title' | transloco }}</h2>\n <p class=\"description\">{{ 'breadcrumbDoc.basic.description' | transloco }}</p>\n\n <div class=\"usage-block\">\n <h3>{{ 'breadcrumbDoc.basic.usage' | transloco }}</h3>\n <pre><code><dd-breadcrumb-classic\n [items]=\"breadcrumbs\"\n (navigate)=\"onNavigate($event)\"\n/>\n\n<dd-breadcrumb-neobrutal\n [items]=\"breadcrumbs\"\n [color]=\"colorViolet\"\n (navigate)=\"onNavigate($event)\"\n/></code></pre>\n </div>\n\n <div class=\"inputs-block\">\n <h3>{{ 'breadcrumbDoc.basic.inputs' | transloco }}</h3>\n <ul>\n <li><strong>items</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.items' | transloco }}</li>\n <li><strong>separator</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.separator' | transloco }}</li>\n <li><strong>color</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.color' | transloco }}</li>\n <li><strong>navigate</strong> \u2014 {{ 'breadcrumbDoc.inputsDesc.navigate' | transloco }}</li>\n </ul>\n </div>\n\n <div class=\"examples-block\">\n <h3>{{ 'breadcrumbDoc.basic.examples' | transloco }}</h3>\n\n <div class=\"example-row\">\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.classic' | transloco }}</p>\n <dd-breadcrumb-classic [items]=\"basicItems\" (navigate)=\"onNavigate($event)\" />\n </div>\n\n <div class=\"example-item\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.classicLong' | transloco }}</p>\n <dd-breadcrumb-classic\n [items]=\"longItems\"\n separator=\">\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalWhite' | transloco }}</p>\n <dd-breadcrumb-neobrutal [items]=\"basicItems\" (navigate)=\"onNavigate($event)\" />\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalViolet' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"basicItems\"\n [color]=\"colorViolet\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalOrange' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"longItems\"\n [color]=\"colorOrange\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'breadcrumbDoc.examples.neobrutalDark' | transloco }}</p>\n <dd-breadcrumb-neobrutal\n [items]=\"basicItems\"\n [color]=\"colorDark\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n\n @if (lastNavigated()) {\n <div class=\"state-hint state-hint--neobrutal\">\n <span>{{ 'breadcrumbDoc.labels.navigated' | transloco }}: </span>\n <b>{{ lastNavigated() }}</b>\n </div>\n }\n </div>\n </dd-card-section>\n\n <dd-card-section>\n <h2>{{ 'breadcrumbDoc.interactive.title' | transloco }}</h2>\n <p class=\"description\">{{ 'breadcrumbDoc.interactive.description' | transloco }}</p>\n\n <div class=\"interactive-controls\">\n <button class=\"interactive-btn interactive-btn--add\" type=\"button\" (click)=\"addBreadcrumb()\">\n + {{ 'breadcrumbDoc.interactive.add' | transloco }}\n </button>\n <button\n class=\"interactive-btn interactive-btn--remove\"\n type=\"button\"\n [disabled]=\"interactiveItems().length <= 1\"\n (click)=\"removeBreadcrumb()\"\n >\n \u2212 {{ 'breadcrumbDoc.interactive.remove' | transloco }}\n </button>\n <span class=\"interactive-count\">\n {{ 'breadcrumbDoc.interactive.count' | transloco }}: {{ interactiveItems().length }}\n </span>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal example-item--wide\">\n <dd-breadcrumb-neobrutal\n [items]=\"interactiveItems()\"\n [color]=\"colorViolet\"\n (navigate)=\"onNavigate($event)\"\n />\n </div>\n </div>\n </dd-card-section>\n</div>\n", styles: [".demo-container{max-width:1200px;margin:0 auto;padding:40px 20px}.demo-container h1{font-size:36px;font-weight:700;color:var(--dd-base-600);margin-bottom:40px;text-align:center;border-bottom:3px solid var(--dd-base-accent-blue);padding-bottom:20px}.demo-container h2{font-size:28px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;border-left:4px solid var(--dd-base-accent-blue);padding-left:15px}.demo-container .description{font-size:16px;line-height:1.6;color:var(--dd-base-400);margin-bottom:25px;padding:15px;background:var(--dd-base-100);border-radius:8px;border-left:3px solid var(--dd-base-300)}.demo-container h3{font-size:20px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;margin-top:25px}.demo-container .usage-block{margin-bottom:25px}.demo-container .usage-block pre{background:var(--dd-base-600);color:var(--dd-base-100);padding:20px;border-radius:8px;overflow-x:auto;margin:0}.demo-container .usage-block pre code{font-family:Courier New,Courier,monospace;font-size:14px;line-height:1.5}.demo-container .inputs-block{margin-bottom:25px}.demo-container .inputs-block ul{list-style:none;padding:0;margin:0}.demo-container .inputs-block ul li{padding:12px 15px;margin-bottom:8px;background:var(--dd-base-100);border-radius:6px;border-left:3px solid var(--dd-base-accent-blue);font-size:15px;line-height:1.5;color:var(--dd-base-500)}.demo-container .inputs-block ul li strong{color:var(--dd-base-accent-blue);font-weight:600}.demo-container .examples-block .example-row{display:flex;gap:20px;margin-bottom:20px;flex-wrap:wrap}.demo-container .examples-block .example-row .example-item{flex:1;min-width:280px;padding:20px;background:var(--dd-base-100);border-radius:8px;border:2px solid var(--dd-base-300);display:flex;flex-direction:column;gap:15px;transition:all .3s ease}.demo-container .examples-block .example-row .example-item:hover{border-color:var(--dd-base-accent-blue);box-shadow:0 4px 12px var(--dd-base-300)}.demo-container .examples-block .example-row .example-item .example-label{font-size:14px;font-weight:600;color:var(--dd-base-400);margin:0;text-align:left}.demo-container .examples-block .example-row .example-item.example-item--neobrutal{gap:18px;border-radius:0;border-width:3px;border-color:var(--dd-neo-ink);background:linear-gradient(135deg,color-mix(in srgb,var(--dd-base-accent-yellow) 18%,transparent) 0 14%,transparent 14% 100%),var(--dd-base-0);box-shadow:8px 8px 0 var(--dd-base-accent-blue)}.demo-container .examples-block .state-hint--neobrutal{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--dd-base-accent-yellow);color:var(--dd-base-600);font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase}.demo-container .interactive-controls{display:flex;align-items:center;gap:12px;margin-bottom:20px;flex-wrap:wrap}.demo-container .interactive-btn{padding:8px 16px;border:3px solid var(--dd-neo-ink);font-size:14px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;cursor:pointer;transition:transform .12s ease,box-shadow .12s ease}.demo-container .interactive-btn:hover:not(:disabled){transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--dd-neo-ink)}.demo-container .interactive-btn:disabled{opacity:.4;cursor:not-allowed}.demo-container .interactive-btn--add{background:var(--dd-base-accent-blue);color:var(--dd-base-0)}.demo-container .interactive-btn--remove{background:var(--dd-base-accent-pink);color:var(--dd-base-0)}.demo-container .interactive-count{padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--dd-base-accent-yellow);color:var(--dd-base-600);font-size:12px;font-weight:900;letter-spacing:.08em;text-transform:uppercase}.demo-container .example-item--wide{flex:1 1 100%;min-width:100%}@media(max-width:768px){.demo-container{padding:20px 15px}.demo-container h1{font-size:28px}.demo-container .examples-block .example-row{flex-direction:column}.demo-container .examples-block .example-row .example-item{min-width:100%}}\n"] }]
|
|
6515
|
+
}] });
|
|
6516
|
+
|
|
6517
|
+
class DuckDevSelectorOption {
|
|
6518
|
+
value = input.required({ ...(ngDevMode ? { debugName: "value" } : {}) });
|
|
6519
|
+
contentId = input(undefined, { ...(ngDevMode ? { debugName: "contentId" } : {}) });
|
|
6520
|
+
templateRef = viewChild.required('contentTpl');
|
|
6521
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DuckDevSelectorOption, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6522
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.1", type: DuckDevSelectorOption, isStandalone: true, selector: "duck-dev-selector-option", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, contentId: { classPropertyName: "contentId", publicName: "contentId", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["contentTpl"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
6523
|
+
<ng-template #contentTpl>
|
|
6524
|
+
<ng-content />
|
|
6525
|
+
</ng-template>
|
|
6526
|
+
`, isInline: true, styles: [":host{display:none}\n"] });
|
|
6527
|
+
}
|
|
6528
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DuckDevSelectorOption, decorators: [{
|
|
6529
|
+
type: Component,
|
|
6530
|
+
args: [{ selector: 'duck-dev-selector-option', imports: [], template: `
|
|
6531
|
+
<ng-template #contentTpl>
|
|
6532
|
+
<ng-content />
|
|
6533
|
+
</ng-template>
|
|
6534
|
+
`, styles: [":host{display:none}\n"] }]
|
|
6535
|
+
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], contentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentId", required: false }] }], templateRef: [{ type: i0.ViewChild, args: ['contentTpl', { isSignal: true }] }] } });
|
|
6536
|
+
|
|
6537
|
+
function getNeobrutalSelectorStyle(color) {
|
|
6538
|
+
switch (color) {
|
|
6539
|
+
case AccentEnumColor.Violet:
|
|
6540
|
+
return {
|
|
6541
|
+
'--neo-selector-surface': 'var(--dd-base-secondary)',
|
|
6542
|
+
'--neo-selector-active': 'color-mix(in srgb, var(--dd-base-secondary) 78%, var(--dd-base-0))',
|
|
6543
|
+
'--neo-selector-text': 'var(--dd-base-0)',
|
|
6544
|
+
'--neo-selector-shadow': 'var(--dd-base-accent-blue)',
|
|
6545
|
+
'--neo-selector-accent': 'var(--dd-base-accent-yellow)',
|
|
6546
|
+
};
|
|
6547
|
+
case AccentEnumColor.Orange:
|
|
6548
|
+
return {
|
|
6549
|
+
'--neo-selector-surface': 'var(--dd-base-accent-orange)',
|
|
6550
|
+
'--neo-selector-active': 'color-mix(in srgb, var(--dd-base-accent-yellow) 68%, var(--dd-base-0))',
|
|
6551
|
+
'--neo-selector-text': 'var(--dd-base-600)',
|
|
6552
|
+
'--neo-selector-shadow': 'var(--dd-base-accent-pink)',
|
|
6553
|
+
'--neo-selector-accent': 'var(--dd-base-accent-yellow)',
|
|
6554
|
+
};
|
|
6555
|
+
case AccentEnumColor.Gray:
|
|
6556
|
+
return {
|
|
6557
|
+
'--neo-selector-surface': 'var(--dd-base-200)',
|
|
6558
|
+
'--neo-selector-active': 'var(--dd-base-0)',
|
|
6559
|
+
'--neo-selector-text': 'var(--dd-base-600)',
|
|
6560
|
+
'--neo-selector-shadow': 'var(--dd-base-accent-blue)',
|
|
6561
|
+
'--neo-selector-accent': 'var(--dd-base-accent-orange)',
|
|
6562
|
+
};
|
|
6563
|
+
case AccentEnumColor.Dark:
|
|
6564
|
+
return {
|
|
6565
|
+
'--neo-selector-surface': 'var(--dd-base-600)',
|
|
6566
|
+
'--neo-selector-active': 'color-mix(in srgb, var(--dd-base-600) 84%, var(--dd-base-400))',
|
|
6567
|
+
'--neo-selector-text': 'var(--dd-base-0)',
|
|
6568
|
+
'--neo-selector-shadow': 'var(--dd-base-accent-orange)',
|
|
6569
|
+
'--neo-selector-accent': 'var(--dd-base-accent-yellow)',
|
|
6570
|
+
};
|
|
6571
|
+
case AccentEnumColor.White:
|
|
6572
|
+
default:
|
|
6573
|
+
return {
|
|
6574
|
+
'--neo-selector-surface': 'var(--dd-base-0)',
|
|
6575
|
+
'--neo-selector-active': 'var(--dd-base-accent-yellow)',
|
|
6576
|
+
'--neo-selector-text': 'var(--dd-base-600)',
|
|
6577
|
+
'--neo-selector-shadow': 'var(--dd-base-600)',
|
|
6578
|
+
'--neo-selector-accent': 'var(--dd-base-accent-orange)',
|
|
6579
|
+
};
|
|
6580
|
+
}
|
|
6581
|
+
}
|
|
6582
|
+
|
|
6583
|
+
class DuckDevSelectorDrum {
|
|
6584
|
+
destroyRef = inject(DestroyRef);
|
|
6585
|
+
value = input(undefined, { ...(ngDevMode ? { debugName: "value" } : {}) });
|
|
6586
|
+
color = input(AccentEnumColor.White, { ...(ngDevMode ? { debugName: "color" } : {}) });
|
|
6587
|
+
showHints = input(true, { ...(ngDevMode ? { debugName: "showHints" } : {}) });
|
|
6588
|
+
hintAlign = input('center', { ...(ngDevMode ? { debugName: "hintAlign" } : {}) });
|
|
6589
|
+
valueChange = output();
|
|
6590
|
+
ionChange = output();
|
|
6591
|
+
options = contentChildren(DuckDevSelectorOption, { ...(ngDevMode ? { debugName: "options" } : {}) });
|
|
6592
|
+
drumEl = viewChild.required('drum');
|
|
6593
|
+
selectorStyle = computed(() => getNeobrutalSelectorStyle(this.color()), { ...(ngDevMode ? { debugName: "selectorStyle" } : {}) });
|
|
6594
|
+
optionsList = computed(() => {
|
|
6595
|
+
return this.options().map((opt) => ({
|
|
6596
|
+
value: opt.value(),
|
|
6597
|
+
contentId: opt.contentId(),
|
|
6598
|
+
template: opt.templateRef(),
|
|
6599
|
+
}));
|
|
6600
|
+
}, { ...(ngDevMode ? { debugName: "optionsList" } : {}) });
|
|
6601
|
+
faceCount = computed(() => Math.max(3, this.optionsList().length), { ...(ngDevMode ? { debugName: "faceCount" } : {}) });
|
|
6602
|
+
faceAngle = computed(() => 360 / this.faceCount(), { ...(ngDevMode ? { debugName: "faceAngle" } : {}) });
|
|
6603
|
+
radius = computed(() => {
|
|
6604
|
+
const faceHeight = 70;
|
|
6605
|
+
return faceHeight / (2 * Math.tan(Math.PI / this.faceCount()));
|
|
6606
|
+
}, { ...(ngDevMode ? { debugName: "radius" } : {}) });
|
|
6607
|
+
currentAngle = signal(0, { ...(ngDevMode ? { debugName: "currentAngle" } : {}) });
|
|
6608
|
+
isDragging = signal(false, { ...(ngDevMode ? { debugName: "isDragging" } : {}) });
|
|
6609
|
+
isAnimating = signal(false, { ...(ngDevMode ? { debugName: "isAnimating" } : {}) });
|
|
6610
|
+
isIdle = computed(() => !this.isDragging() && !this.isAnimating(), { ...(ngDevMode ? { debugName: "isIdle" } : {}) });
|
|
6611
|
+
startY = 0;
|
|
6612
|
+
startAngle = 0;
|
|
6613
|
+
lastY = 0;
|
|
6614
|
+
lastTime = 0;
|
|
6615
|
+
velocity = 0;
|
|
6616
|
+
animationId = null;
|
|
6617
|
+
boundPointerMove = this.onPointerMove.bind(this);
|
|
6618
|
+
boundPointerUp = this.onPointerUp.bind(this);
|
|
6619
|
+
constructor() {
|
|
6620
|
+
afterNextRender(() => {
|
|
6621
|
+
this.syncAngleToValue();
|
|
6622
|
+
});
|
|
6623
|
+
this.destroyRef.onDestroy(() => {
|
|
6624
|
+
if (this.animationId !== null) {
|
|
6625
|
+
cancelAnimationFrame(this.animationId);
|
|
6626
|
+
}
|
|
6627
|
+
document.removeEventListener('pointermove', this.boundPointerMove);
|
|
6628
|
+
document.removeEventListener('pointerup', this.boundPointerUp);
|
|
6629
|
+
});
|
|
6630
|
+
}
|
|
6631
|
+
ngAfterContentInit() {
|
|
6632
|
+
this.syncAngleToValue();
|
|
6633
|
+
}
|
|
6634
|
+
onStepPrev() {
|
|
6635
|
+
if (this.isAnimating())
|
|
6636
|
+
return;
|
|
6637
|
+
this.isAnimating.set(true);
|
|
6638
|
+
const angle = this.faceAngle();
|
|
6639
|
+
this.settleToAngle(this.currentAngle() - angle);
|
|
6640
|
+
}
|
|
6641
|
+
onStepNext() {
|
|
6642
|
+
if (this.isAnimating())
|
|
6643
|
+
return;
|
|
6644
|
+
this.isAnimating.set(true);
|
|
6645
|
+
const angle = this.faceAngle();
|
|
6646
|
+
this.settleToAngle(this.currentAngle() + angle);
|
|
6647
|
+
}
|
|
6648
|
+
onPointerDown(event) {
|
|
6649
|
+
event.preventDefault();
|
|
6650
|
+
if (this.animationId !== null) {
|
|
6651
|
+
cancelAnimationFrame(this.animationId);
|
|
6652
|
+
this.animationId = null;
|
|
6653
|
+
}
|
|
6654
|
+
this.isDragging.set(true);
|
|
6655
|
+
this.isAnimating.set(false);
|
|
6656
|
+
this.startY = event.clientY;
|
|
6657
|
+
this.startAngle = this.currentAngle();
|
|
6658
|
+
this.lastY = event.clientY;
|
|
6659
|
+
this.lastTime = performance.now();
|
|
6660
|
+
this.velocity = 0;
|
|
6661
|
+
document.addEventListener('pointermove', this.boundPointerMove);
|
|
6662
|
+
document.addEventListener('pointerup', this.boundPointerUp);
|
|
6663
|
+
}
|
|
6664
|
+
onPointerMove(event) {
|
|
6665
|
+
const deltaY = event.clientY - this.startY;
|
|
6666
|
+
const sensitivity = 0.5;
|
|
6667
|
+
const newAngle = this.startAngle + deltaY * sensitivity;
|
|
6668
|
+
const now = performance.now();
|
|
6669
|
+
const dt = now - this.lastTime;
|
|
6670
|
+
if (dt > 0) {
|
|
6671
|
+
this.velocity = (event.clientY - this.lastY) / dt;
|
|
6672
|
+
}
|
|
6673
|
+
this.lastY = event.clientY;
|
|
6674
|
+
this.lastTime = now;
|
|
6675
|
+
this.currentAngle.set(newAngle);
|
|
6676
|
+
}
|
|
6677
|
+
onPointerUp() {
|
|
6678
|
+
document.removeEventListener('pointermove', this.boundPointerMove);
|
|
6679
|
+
document.removeEventListener('pointerup', this.boundPointerUp);
|
|
6680
|
+
this.isDragging.set(false);
|
|
6681
|
+
this.isAnimating.set(true);
|
|
6682
|
+
// Convert pointer velocity (px/ms) to angular velocity (deg/frame at 60fps)
|
|
6683
|
+
const angularVelocity = this.velocity * 0.5 * (1000 / 60);
|
|
6684
|
+
this.spinWithFriction(angularVelocity);
|
|
6685
|
+
}
|
|
6686
|
+
spinWithFriction(angularVelocity) {
|
|
6687
|
+
const friction = 0.985;
|
|
6688
|
+
const snapThreshold = 0.15;
|
|
6689
|
+
let vel = angularVelocity;
|
|
6690
|
+
let lastTime = performance.now();
|
|
6691
|
+
const step = (now) => {
|
|
6692
|
+
const dt = (now - lastTime) / 16.667; // normalize to 60fps
|
|
6693
|
+
lastTime = now;
|
|
6694
|
+
vel *= Math.pow(friction, dt);
|
|
6695
|
+
this.currentAngle.update((a) => a + vel * dt);
|
|
6696
|
+
if (Math.abs(vel) > snapThreshold) {
|
|
6697
|
+
this.animationId = requestAnimationFrame(step);
|
|
6698
|
+
}
|
|
6699
|
+
else {
|
|
6700
|
+
// Velocity died — settle to nearest face
|
|
6701
|
+
const angle = this.faceAngle();
|
|
6702
|
+
const targetSnap = Math.round(this.currentAngle() / angle) * angle;
|
|
6703
|
+
this.settleToAngle(targetSnap);
|
|
6704
|
+
}
|
|
6705
|
+
};
|
|
6706
|
+
this.animationId = requestAnimationFrame(step);
|
|
6707
|
+
}
|
|
6708
|
+
settleToAngle(target) {
|
|
6709
|
+
const start = this.currentAngle();
|
|
6710
|
+
const diff = target - start;
|
|
6711
|
+
// If already very close, just set it
|
|
6712
|
+
if (Math.abs(diff) < 0.5) {
|
|
6713
|
+
this.currentAngle.set(target);
|
|
6714
|
+
this.isAnimating.set(false);
|
|
6715
|
+
this.emitCurrentValue();
|
|
6716
|
+
return;
|
|
6717
|
+
}
|
|
6718
|
+
// Spring-like settle: longer for bigger gaps, min 300ms, max 700ms
|
|
6719
|
+
const duration = Math.min(700, Math.max(300, Math.abs(diff) * 8));
|
|
6720
|
+
const startTime = performance.now();
|
|
6721
|
+
const step = (now) => {
|
|
6722
|
+
const elapsed = now - startTime;
|
|
6723
|
+
const t = Math.min(elapsed / duration, 1);
|
|
6724
|
+
// Smooth ease-out with slight overshoot for natural feel
|
|
6725
|
+
const eased = 1 - Math.pow(1 - t, 2.5);
|
|
6726
|
+
this.currentAngle.set(start + diff * eased);
|
|
6727
|
+
if (t < 1) {
|
|
6728
|
+
this.animationId = requestAnimationFrame(step);
|
|
6729
|
+
}
|
|
6730
|
+
else {
|
|
6731
|
+
this.animationId = null;
|
|
6732
|
+
this.currentAngle.set(target);
|
|
6733
|
+
this.isAnimating.set(false);
|
|
6734
|
+
this.emitCurrentValue();
|
|
6735
|
+
}
|
|
6736
|
+
};
|
|
6737
|
+
this.animationId = requestAnimationFrame(step);
|
|
6738
|
+
}
|
|
6739
|
+
emitCurrentValue() {
|
|
6740
|
+
const angle = this.faceAngle();
|
|
6741
|
+
const opts = this.optionsList();
|
|
6742
|
+
if (opts.length === 0)
|
|
6743
|
+
return;
|
|
6744
|
+
const normalizedAngle = ((this.currentAngle() % 360) + 360) % 360;
|
|
6745
|
+
const index = Math.round(normalizedAngle / angle) % opts.length;
|
|
6746
|
+
const value = opts[index].value;
|
|
6747
|
+
this.valueChange.emit(value);
|
|
6748
|
+
this.ionChange.emit({ detail: { value } });
|
|
6749
|
+
}
|
|
6750
|
+
syncAngleToValue() {
|
|
6751
|
+
const incoming = this.value();
|
|
6752
|
+
const opts = this.optionsList();
|
|
6753
|
+
if (!incoming || opts.length === 0)
|
|
6754
|
+
return;
|
|
6755
|
+
const index = opts.findIndex((o) => o.value === incoming);
|
|
6756
|
+
if (index >= 0) {
|
|
6757
|
+
this.currentAngle.set(index * this.faceAngle());
|
|
6758
|
+
}
|
|
6759
|
+
}
|
|
6760
|
+
getFaceTransform(index) {
|
|
6761
|
+
const angle = this.faceAngle();
|
|
6762
|
+
const r = this.radius();
|
|
6763
|
+
return `rotateX(${index * angle}deg) translateZ(${r}px)`;
|
|
6764
|
+
}
|
|
6765
|
+
isActiveFace(index) {
|
|
6766
|
+
const angle = this.faceAngle();
|
|
6767
|
+
const opts = this.optionsList();
|
|
6768
|
+
if (opts.length === 0)
|
|
6769
|
+
return false;
|
|
6770
|
+
const normalizedAngle = ((this.currentAngle() % 360) + 360) % 360;
|
|
6771
|
+
const activeIndex = Math.round(normalizedAngle / angle) % opts.length;
|
|
6772
|
+
return activeIndex === index;
|
|
6773
|
+
}
|
|
6774
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DuckDevSelectorDrum, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6775
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: DuckDevSelectorDrum, isStandalone: true, selector: "duck-dev-selector-drum", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, showHints: { classPropertyName: "showHints", publicName: "showHints", isSignal: true, isRequired: false, transformFunction: null }, hintAlign: { classPropertyName: "hintAlign", publicName: "hintAlign", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", ionChange: "ionChange" }, queries: [{ propertyName: "options", predicate: DuckDevSelectorOption, isSignal: true }], viewQueries: [{ propertyName: "drumEl", first: true, predicate: ["drum"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"dd-drum\"\n [class.dd-drum--hints-start]=\"hintAlign() === 'start'\"\n [class.dd-drum--hints-end]=\"hintAlign() === 'end'\"\n [ngStyle]=\"selectorStyle()\"\n>\n @if (showHints()) {\n <button class=\"dd-drum__hint dd-drum__hint--top\" type=\"button\" (click)=\"onStepPrev()\">\n ▲\n </button>\n }\n\n <div class=\"dd-drum__scene\">\n <div\n class=\"dd-drum__prism\"\n [class.dd-drum__prism--idle]=\"isIdle()\"\n #drum\n [style.transform]=\"'rotateX(' + -currentAngle() + 'deg)'\"\n (pointerdown)=\"onPointerDown($event)\"\n >\n @for (opt of optionsList(); track opt.value; let i = $index) {\n <div\n class=\"dd-drum__face\"\n [class.dd-drum__face--active]=\"isActiveFace(i)\"\n [style.transform]=\"getFaceTransform(i)\"\n >\n <span class=\"dd-drum__face-copy\">\n <ng-container *ngTemplateOutlet=\"opt.template\" />\n </span>\n </div>\n }\n </div>\n </div>\n\n @if (showHints()) {\n <button class=\"dd-drum__hint dd-drum__hint--bottom\" type=\"button\" (click)=\"onStepNext()\">\n ▼\n </button>\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:inline-block}.dd-drum{--neo-selector-surface: var(--dd-base-0);--neo-selector-active: var(--dd-base-accent-yellow);--neo-selector-text: var(--dd-base-600);--neo-selector-shadow: var(--dd-base-600);--neo-selector-accent: var(--dd-base-accent-orange);display:inline-flex;flex-direction:column;align-items:center;-webkit-user-select:none;user-select:none;touch-action:none}.dd-drum--hints-start{align-items:flex-start}.dd-drum--hints-end{align-items:flex-end}.dd-drum__hint{font-size:14px;color:var(--neo-selector-shadow);opacity:.35;transition:opacity .3s ease,transform .2s ease;line-height:1;background:none;border:none;padding:4px 12px;cursor:pointer;font-family:inherit;-webkit-tap-highlight-color:transparent}.dd-drum__hint:hover{opacity:.85}.dd-drum__hint:active{opacity:1}.dd-drum__hint--top{animation:hint-bob-up 2s ease-in-out infinite}.dd-drum__hint--top:hover{animation:none;transform:translateY(-2px)}.dd-drum__hint--bottom{animation:hint-bob-down 2s ease-in-out infinite}.dd-drum__hint--bottom:hover{animation:none;transform:translateY(2px)}@keyframes hint-bob-up{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes hint-bob-down{0%,to{transform:translateY(0)}50%{transform:translateY(3px)}}.dd-drum:hover .dd-drum__hint{opacity:.6}.dd-drum__scene{perspective:600px;perspective-origin:center center;width:220px;height:140px;display:flex;align-items:center;justify-content:center;cursor:grab}.dd-drum__scene:active{cursor:grabbing}.dd-drum__prism{width:100%;height:70px;position:relative;transform-style:preserve-3d;transition:transform .15s ease}.dd-drum__prism--idle{animation:drum-idle 3.5s ease-in-out infinite}.dd-drum__scene:hover .dd-drum__prism--idle{animation:drum-hover 1.8s ease-in-out infinite}@keyframes drum-idle{0%,to{transform:rotateY(0)}33%{transform:rotateY(1.5deg)}66%{transform:rotateY(-1.5deg)}}@keyframes drum-hover{0%,to{transform:rotateY(0) rotateX(0)}25%{transform:rotateY(2.5deg) rotateX(-4deg)}75%{transform:rotateY(-2.5deg) rotateX(4deg)}}.dd-drum__face{position:absolute;width:100%;height:70px;top:0;left:0;display:flex;align-items:center;justify-content:center;border:4px solid var(--dd-neo-ink);background:var(--neo-selector-surface);box-shadow:4px 4px 0 var(--neo-selector-shadow);backface-visibility:hidden;box-sizing:border-box;transition:background .2s ease}.dd-drum__face--active{background:var(--neo-selector-active)}.dd-drum__face-copy{display:inline-flex;align-items:center;justify-content:center;font-size:.88rem;font-weight:900;letter-spacing:.14em;line-height:1.1;text-transform:uppercase;color:var(--neo-selector-text)}@media(max-width:640px){.dd-drum__scene{width:180px;height:120px}.dd-drum__prism,.dd-drum__face{height:60px}.dd-drum__face-copy{font-size:.76rem;letter-spacing:.11em}}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
6776
|
+
}
|
|
6777
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DuckDevSelectorDrum, decorators: [{
|
|
6778
|
+
type: Component,
|
|
6779
|
+
args: [{ selector: 'duck-dev-selector-drum', imports: [NgStyle, NgTemplateOutlet], template: "<div\n class=\"dd-drum\"\n [class.dd-drum--hints-start]=\"hintAlign() === 'start'\"\n [class.dd-drum--hints-end]=\"hintAlign() === 'end'\"\n [ngStyle]=\"selectorStyle()\"\n>\n @if (showHints()) {\n <button class=\"dd-drum__hint dd-drum__hint--top\" type=\"button\" (click)=\"onStepPrev()\">\n ▲\n </button>\n }\n\n <div class=\"dd-drum__scene\">\n <div\n class=\"dd-drum__prism\"\n [class.dd-drum__prism--idle]=\"isIdle()\"\n #drum\n [style.transform]=\"'rotateX(' + -currentAngle() + 'deg)'\"\n (pointerdown)=\"onPointerDown($event)\"\n >\n @for (opt of optionsList(); track opt.value; let i = $index) {\n <div\n class=\"dd-drum__face\"\n [class.dd-drum__face--active]=\"isActiveFace(i)\"\n [style.transform]=\"getFaceTransform(i)\"\n >\n <span class=\"dd-drum__face-copy\">\n <ng-container *ngTemplateOutlet=\"opt.template\" />\n </span>\n </div>\n }\n </div>\n </div>\n\n @if (showHints()) {\n <button class=\"dd-drum__hint dd-drum__hint--bottom\" type=\"button\" (click)=\"onStepNext()\">\n ▼\n </button>\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:inline-block}.dd-drum{--neo-selector-surface: var(--dd-base-0);--neo-selector-active: var(--dd-base-accent-yellow);--neo-selector-text: var(--dd-base-600);--neo-selector-shadow: var(--dd-base-600);--neo-selector-accent: var(--dd-base-accent-orange);display:inline-flex;flex-direction:column;align-items:center;-webkit-user-select:none;user-select:none;touch-action:none}.dd-drum--hints-start{align-items:flex-start}.dd-drum--hints-end{align-items:flex-end}.dd-drum__hint{font-size:14px;color:var(--neo-selector-shadow);opacity:.35;transition:opacity .3s ease,transform .2s ease;line-height:1;background:none;border:none;padding:4px 12px;cursor:pointer;font-family:inherit;-webkit-tap-highlight-color:transparent}.dd-drum__hint:hover{opacity:.85}.dd-drum__hint:active{opacity:1}.dd-drum__hint--top{animation:hint-bob-up 2s ease-in-out infinite}.dd-drum__hint--top:hover{animation:none;transform:translateY(-2px)}.dd-drum__hint--bottom{animation:hint-bob-down 2s ease-in-out infinite}.dd-drum__hint--bottom:hover{animation:none;transform:translateY(2px)}@keyframes hint-bob-up{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes hint-bob-down{0%,to{transform:translateY(0)}50%{transform:translateY(3px)}}.dd-drum:hover .dd-drum__hint{opacity:.6}.dd-drum__scene{perspective:600px;perspective-origin:center center;width:220px;height:140px;display:flex;align-items:center;justify-content:center;cursor:grab}.dd-drum__scene:active{cursor:grabbing}.dd-drum__prism{width:100%;height:70px;position:relative;transform-style:preserve-3d;transition:transform .15s ease}.dd-drum__prism--idle{animation:drum-idle 3.5s ease-in-out infinite}.dd-drum__scene:hover .dd-drum__prism--idle{animation:drum-hover 1.8s ease-in-out infinite}@keyframes drum-idle{0%,to{transform:rotateY(0)}33%{transform:rotateY(1.5deg)}66%{transform:rotateY(-1.5deg)}}@keyframes drum-hover{0%,to{transform:rotateY(0) rotateX(0)}25%{transform:rotateY(2.5deg) rotateX(-4deg)}75%{transform:rotateY(-2.5deg) rotateX(4deg)}}.dd-drum__face{position:absolute;width:100%;height:70px;top:0;left:0;display:flex;align-items:center;justify-content:center;border:4px solid var(--dd-neo-ink);background:var(--neo-selector-surface);box-shadow:4px 4px 0 var(--neo-selector-shadow);backface-visibility:hidden;box-sizing:border-box;transition:background .2s ease}.dd-drum__face--active{background:var(--neo-selector-active)}.dd-drum__face-copy{display:inline-flex;align-items:center;justify-content:center;font-size:.88rem;font-weight:900;letter-spacing:.14em;line-height:1.1;text-transform:uppercase;color:var(--neo-selector-text)}@media(max-width:640px){.dd-drum__scene{width:180px;height:120px}.dd-drum__prism,.dd-drum__face{height:60px}.dd-drum__face-copy{font-size:.76rem;letter-spacing:.11em}}\n"] }]
|
|
6780
|
+
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], showHints: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHints", required: false }] }], hintAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "hintAlign", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], ionChange: [{ type: i0.Output, args: ["ionChange"] }], options: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => DuckDevSelectorOption), { isSignal: true }] }], drumEl: [{ type: i0.ViewChild, args: ['drum', { isSignal: true }] }] } });
|
|
6781
|
+
|
|
6782
|
+
class SelectorBlock {
|
|
6783
|
+
drumSelected = signal('rush', { ...(ngDevMode ? { debugName: "drumSelected" } : {}) });
|
|
6784
|
+
lastEvent = signal('', { ...(ngDevMode ? { debugName: "lastEvent" } : {}) });
|
|
6785
|
+
colorViolet = AccentEnumColor.Violet;
|
|
6786
|
+
colorOrange = AccentEnumColor.Orange;
|
|
6787
|
+
colorDark = AccentEnumColor.Dark;
|
|
6788
|
+
colorGray = AccentEnumColor.Gray;
|
|
6789
|
+
onIonChange(e) {
|
|
6790
|
+
this.lastEvent.set(e.detail.value);
|
|
6791
|
+
}
|
|
6792
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: SelectorBlock, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6793
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.1", type: SelectorBlock, isStandalone: true, selector: "app-selector-block", ngImport: i0, template: "<div class=\"demo-container\">\n <h1>{{ 'selectorDoc.title' | transloco }}</h1>\n\n <dd-card-section>\n <h2>{{ 'selectorDoc.basic.title' | transloco }}</h2>\n <p class=\"description\">{{ 'selectorDoc.basic.description' | transloco }}</p>\n\n <div class=\"usage-block\">\n <h3>{{ 'selectorDoc.basic.usage' | transloco }}</h3>\n <pre><code><duck-dev-selector-drum [value]=\"selected()\" (valueChange)=\"selected.set($event)\">\n <duck-dev-selector-option value=\"rush\">Rush</duck-dev-selector-option>\n <duck-dev-selector-option value=\"strategy\">Strategy</duck-dev-selector-option>\n <duck-dev-selector-option value=\"rpg\">RPG</duck-dev-selector-option>\n</duck-dev-selector-drum></code></pre>\n </div>\n\n <div class=\"inputs-block\">\n <h3>{{ 'selectorDoc.basic.inputs' | transloco }}</h3>\n <ul>\n <li><strong>value</strong> \u2014 {{ 'selectorDoc.inputsDesc.value' | transloco }}</li>\n <li>\n <strong>valueChange</strong> \u2014 {{ 'selectorDoc.inputsDesc.valueChange' | transloco }}\n </li>\n <li><strong>ionChange</strong> \u2014 {{ 'selectorDoc.inputsDesc.ionChange' | transloco }}</li>\n <li><strong>color</strong> \u2014 {{ 'selectorDoc.inputsDesc.color' | transloco }}</li>\n <li>\n <strong>duck-dev-selector-option[value]</strong> \u2014\n {{ 'selectorDoc.inputsDesc.optionValue' | transloco }}\n </li>\n </ul>\n </div>\n\n <div class=\"examples-block\">\n <h3>{{ 'selectorDoc.drum.title' | transloco }}</h3>\n <p class=\"description\">{{ 'selectorDoc.drum.description' | transloco }}</p>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'selectorDoc.examples.drumWhite' | transloco }}</p>\n <duck-dev-selector-drum\n [value]=\"drumSelected()\"\n (valueChange)=\"drumSelected.set($event)\"\n (ionChange)=\"onIonChange($event)\"\n >\n <duck-dev-selector-option value=\"rush\">{{\n 'selectorDoc.labels.rush' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"strategy\">{{\n 'selectorDoc.labels.strategy' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"rpg\">{{\n 'selectorDoc.labels.rpg' | transloco\n }}</duck-dev-selector-option>\n </duck-dev-selector-drum>\n <div class=\"state-hint state-hint--neobrutal\">\n <span>{{ 'selectorDoc.labels.selected' | transloco }}: </span>\n <b>{{ drumSelected() }}</b>\n <span class=\"divider\">|</span>\n <span\n >ionChange: <b>{{ lastEvent() }}</b></span\n >\n </div>\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'selectorDoc.examples.drumViolet' | transloco }}</p>\n <duck-dev-selector-drum [value]=\"'rush'\" [color]=\"colorViolet\">\n <duck-dev-selector-option value=\"rush\">{{\n 'selectorDoc.labels.rush' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"strategy\">{{\n 'selectorDoc.labels.strategy' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"rpg\">{{\n 'selectorDoc.labels.rpg' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"arcade\">{{\n 'selectorDoc.labels.arcade' | transloco\n }}</duck-dev-selector-option>\n </duck-dev-selector-drum>\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'selectorDoc.examples.drumOrange' | transloco }}</p>\n <duck-dev-selector-drum [value]=\"'draft'\" [color]=\"colorOrange\">\n <duck-dev-selector-option value=\"draft\">{{\n 'selectorDoc.labels.draft' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"launch\">{{\n 'selectorDoc.labels.launch' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"archive\">{{\n 'selectorDoc.labels.archive' | transloco\n }}</duck-dev-selector-option>\n </duck-dev-selector-drum>\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'selectorDoc.examples.drumDark' | transloco }}</p>\n <duck-dev-selector-drum [value]=\"'strategy'\" [color]=\"colorDark\">\n <duck-dev-selector-option value=\"strategy\">{{\n 'selectorDoc.labels.strategy' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"research\">{{\n 'selectorDoc.labels.research' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"prototype\">{{\n 'selectorDoc.labels.prototype' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"validate\">{{\n 'selectorDoc.labels.validate' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"deliver\">{{\n 'selectorDoc.labels.deliver' | transloco\n }}</duck-dev-selector-option>\n </duck-dev-selector-drum>\n </div>\n </div>\n </div>\n </dd-card-section>\n</div>\n", styles: [".demo-container{max-width:1200px;margin:0 auto;padding:40px 20px}.demo-container h1{font-size:36px;font-weight:700;color:var(--dd-base-600);margin-bottom:40px;text-align:center;border-bottom:3px solid var(--dd-base-accent-blue);padding-bottom:20px}.demo-container h2{font-size:28px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;border-left:4px solid var(--dd-base-accent-blue);padding-left:15px}.demo-container .description{font-size:16px;line-height:1.6;color:var(--dd-base-400);margin-bottom:25px;padding:15px;background:var(--dd-base-100);border-radius:8px;border-left:3px solid var(--dd-base-300)}.demo-container h3{font-size:20px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;margin-top:25px}.demo-container .usage-block{margin-bottom:25px}.demo-container .usage-block pre{background:var(--dd-base-600);color:var(--dd-base-100);padding:20px;border-radius:8px;overflow-x:auto;margin:0}.demo-container .usage-block pre code{font-family:Courier New,Courier,monospace;font-size:14px;line-height:1.5}.demo-container .inputs-block{margin-bottom:25px}.demo-container .inputs-block ul{list-style:none;padding:0;margin:0}.demo-container .inputs-block ul li{padding:12px 15px;margin-bottom:8px;background:var(--dd-base-100);border-radius:6px;border-left:3px solid var(--dd-base-accent-blue);font-size:15px;line-height:1.5;color:var(--dd-base-500)}.demo-container .inputs-block ul li strong{color:var(--dd-base-accent-blue);font-weight:600}.demo-container .examples-block .example-row{display:flex;gap:20px;margin-bottom:20px;flex-wrap:wrap}.demo-container .examples-block .example-row.example-row--roadsign{align-items:flex-start}.demo-container .examples-block .example-row .example-item{flex:1;min-width:280px;padding:20px;background:var(--dd-base-100);border-radius:8px;border:2px solid var(--dd-base-300);display:flex;flex-direction:column;align-items:center;gap:15px;transition:all .3s ease}.demo-container .examples-block .example-row .example-item:hover{border-color:var(--dd-base-accent-blue);box-shadow:0 4px 12px var(--dd-base-300)}.demo-container .examples-block .example-row .example-item .example-label{font-size:14px;font-weight:600;color:var(--dd-base-400);margin:0;text-align:left;width:100%}.demo-container .examples-block .example-row .example-item .state-hint{font-size:14px;color:var(--dd-base-400)}.demo-container .examples-block .example-row .example-item .state-hint .divider{margin:0 8px;color:var(--dd-base-300)}.demo-container .examples-block .example-row .example-item.example-item--neobrutal{gap:18px;border-radius:0;border-width:3px;border-color:var(--dd-neo-ink);background:linear-gradient(135deg,color-mix(in srgb,var(--dd-base-accent-yellow) 18%,transparent) 0 14%,transparent 14% 100%),var(--dd-base-0);box-shadow:8px 8px 0 var(--dd-base-accent-blue)}.demo-container .examples-block .example-row .example-item .state-hint--neobrutal{display:inline-flex;width:fit-content;align-items:center;gap:8px;padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--dd-base-accent-yellow);color:var(--dd-base-600);font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase}@media(max-width:768px){.demo-container{padding:20px 15px}.demo-container h1{font-size:28px}.demo-container .examples-block .example-row{flex-direction:column}.demo-container .examples-block .example-row .example-item{min-width:100%}}\n"], dependencies: [{ kind: "component", type: DuckDevCardSection, selector: "dd-card-section" }, { kind: "component", type: DuckDevSelectorDrum, selector: "duck-dev-selector-drum", inputs: ["value", "color", "showHints", "hintAlign"], outputs: ["valueChange", "ionChange"] }, { kind: "component", type: DuckDevSelectorOption, selector: "duck-dev-selector-option", inputs: ["value", "contentId"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
6794
|
+
}
|
|
6795
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: SelectorBlock, decorators: [{
|
|
6796
|
+
type: Component,
|
|
6797
|
+
args: [{ selector: 'app-selector-block', imports: [TranslocoPipe, DuckDevCardSection, DuckDevSelectorDrum, DuckDevSelectorOption], template: "<div class=\"demo-container\">\n <h1>{{ 'selectorDoc.title' | transloco }}</h1>\n\n <dd-card-section>\n <h2>{{ 'selectorDoc.basic.title' | transloco }}</h2>\n <p class=\"description\">{{ 'selectorDoc.basic.description' | transloco }}</p>\n\n <div class=\"usage-block\">\n <h3>{{ 'selectorDoc.basic.usage' | transloco }}</h3>\n <pre><code><duck-dev-selector-drum [value]=\"selected()\" (valueChange)=\"selected.set($event)\">\n <duck-dev-selector-option value=\"rush\">Rush</duck-dev-selector-option>\n <duck-dev-selector-option value=\"strategy\">Strategy</duck-dev-selector-option>\n <duck-dev-selector-option value=\"rpg\">RPG</duck-dev-selector-option>\n</duck-dev-selector-drum></code></pre>\n </div>\n\n <div class=\"inputs-block\">\n <h3>{{ 'selectorDoc.basic.inputs' | transloco }}</h3>\n <ul>\n <li><strong>value</strong> \u2014 {{ 'selectorDoc.inputsDesc.value' | transloco }}</li>\n <li>\n <strong>valueChange</strong> \u2014 {{ 'selectorDoc.inputsDesc.valueChange' | transloco }}\n </li>\n <li><strong>ionChange</strong> \u2014 {{ 'selectorDoc.inputsDesc.ionChange' | transloco }}</li>\n <li><strong>color</strong> \u2014 {{ 'selectorDoc.inputsDesc.color' | transloco }}</li>\n <li>\n <strong>duck-dev-selector-option[value]</strong> \u2014\n {{ 'selectorDoc.inputsDesc.optionValue' | transloco }}\n </li>\n </ul>\n </div>\n\n <div class=\"examples-block\">\n <h3>{{ 'selectorDoc.drum.title' | transloco }}</h3>\n <p class=\"description\">{{ 'selectorDoc.drum.description' | transloco }}</p>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'selectorDoc.examples.drumWhite' | transloco }}</p>\n <duck-dev-selector-drum\n [value]=\"drumSelected()\"\n (valueChange)=\"drumSelected.set($event)\"\n (ionChange)=\"onIonChange($event)\"\n >\n <duck-dev-selector-option value=\"rush\">{{\n 'selectorDoc.labels.rush' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"strategy\">{{\n 'selectorDoc.labels.strategy' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"rpg\">{{\n 'selectorDoc.labels.rpg' | transloco\n }}</duck-dev-selector-option>\n </duck-dev-selector-drum>\n <div class=\"state-hint state-hint--neobrutal\">\n <span>{{ 'selectorDoc.labels.selected' | transloco }}: </span>\n <b>{{ drumSelected() }}</b>\n <span class=\"divider\">|</span>\n <span\n >ionChange: <b>{{ lastEvent() }}</b></span\n >\n </div>\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'selectorDoc.examples.drumViolet' | transloco }}</p>\n <duck-dev-selector-drum [value]=\"'rush'\" [color]=\"colorViolet\">\n <duck-dev-selector-option value=\"rush\">{{\n 'selectorDoc.labels.rush' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"strategy\">{{\n 'selectorDoc.labels.strategy' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"rpg\">{{\n 'selectorDoc.labels.rpg' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"arcade\">{{\n 'selectorDoc.labels.arcade' | transloco\n }}</duck-dev-selector-option>\n </duck-dev-selector-drum>\n </div>\n </div>\n\n <div class=\"example-row\">\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'selectorDoc.examples.drumOrange' | transloco }}</p>\n <duck-dev-selector-drum [value]=\"'draft'\" [color]=\"colorOrange\">\n <duck-dev-selector-option value=\"draft\">{{\n 'selectorDoc.labels.draft' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"launch\">{{\n 'selectorDoc.labels.launch' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"archive\">{{\n 'selectorDoc.labels.archive' | transloco\n }}</duck-dev-selector-option>\n </duck-dev-selector-drum>\n </div>\n\n <div class=\"example-item example-item--neobrutal\">\n <p class=\"example-label\">{{ 'selectorDoc.examples.drumDark' | transloco }}</p>\n <duck-dev-selector-drum [value]=\"'strategy'\" [color]=\"colorDark\">\n <duck-dev-selector-option value=\"strategy\">{{\n 'selectorDoc.labels.strategy' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"research\">{{\n 'selectorDoc.labels.research' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"prototype\">{{\n 'selectorDoc.labels.prototype' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"validate\">{{\n 'selectorDoc.labels.validate' | transloco\n }}</duck-dev-selector-option>\n <duck-dev-selector-option value=\"deliver\">{{\n 'selectorDoc.labels.deliver' | transloco\n }}</duck-dev-selector-option>\n </duck-dev-selector-drum>\n </div>\n </div>\n </div>\n </dd-card-section>\n</div>\n", styles: [".demo-container{max-width:1200px;margin:0 auto;padding:40px 20px}.demo-container h1{font-size:36px;font-weight:700;color:var(--dd-base-600);margin-bottom:40px;text-align:center;border-bottom:3px solid var(--dd-base-accent-blue);padding-bottom:20px}.demo-container h2{font-size:28px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;border-left:4px solid var(--dd-base-accent-blue);padding-left:15px}.demo-container .description{font-size:16px;line-height:1.6;color:var(--dd-base-400);margin-bottom:25px;padding:15px;background:var(--dd-base-100);border-radius:8px;border-left:3px solid var(--dd-base-300)}.demo-container h3{font-size:20px;font-weight:600;color:var(--dd-base-500);margin-bottom:15px;margin-top:25px}.demo-container .usage-block{margin-bottom:25px}.demo-container .usage-block pre{background:var(--dd-base-600);color:var(--dd-base-100);padding:20px;border-radius:8px;overflow-x:auto;margin:0}.demo-container .usage-block pre code{font-family:Courier New,Courier,monospace;font-size:14px;line-height:1.5}.demo-container .inputs-block{margin-bottom:25px}.demo-container .inputs-block ul{list-style:none;padding:0;margin:0}.demo-container .inputs-block ul li{padding:12px 15px;margin-bottom:8px;background:var(--dd-base-100);border-radius:6px;border-left:3px solid var(--dd-base-accent-blue);font-size:15px;line-height:1.5;color:var(--dd-base-500)}.demo-container .inputs-block ul li strong{color:var(--dd-base-accent-blue);font-weight:600}.demo-container .examples-block .example-row{display:flex;gap:20px;margin-bottom:20px;flex-wrap:wrap}.demo-container .examples-block .example-row.example-row--roadsign{align-items:flex-start}.demo-container .examples-block .example-row .example-item{flex:1;min-width:280px;padding:20px;background:var(--dd-base-100);border-radius:8px;border:2px solid var(--dd-base-300);display:flex;flex-direction:column;align-items:center;gap:15px;transition:all .3s ease}.demo-container .examples-block .example-row .example-item:hover{border-color:var(--dd-base-accent-blue);box-shadow:0 4px 12px var(--dd-base-300)}.demo-container .examples-block .example-row .example-item .example-label{font-size:14px;font-weight:600;color:var(--dd-base-400);margin:0;text-align:left;width:100%}.demo-container .examples-block .example-row .example-item .state-hint{font-size:14px;color:var(--dd-base-400)}.demo-container .examples-block .example-row .example-item .state-hint .divider{margin:0 8px;color:var(--dd-base-300)}.demo-container .examples-block .example-row .example-item.example-item--neobrutal{gap:18px;border-radius:0;border-width:3px;border-color:var(--dd-neo-ink);background:linear-gradient(135deg,color-mix(in srgb,var(--dd-base-accent-yellow) 18%,transparent) 0 14%,transparent 14% 100%),var(--dd-base-0);box-shadow:8px 8px 0 var(--dd-base-accent-blue)}.demo-container .examples-block .example-row .example-item .state-hint--neobrutal{display:inline-flex;width:fit-content;align-items:center;gap:8px;padding:6px 10px;border:2px solid var(--dd-neo-ink);background:var(--dd-base-accent-yellow);color:var(--dd-base-600);font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase}@media(max-width:768px){.demo-container{padding:20px 15px}.demo-container h1{font-size:28px}.demo-container .examples-block .example-row{flex-direction:column}.demo-container .examples-block .example-row .example-item{min-width:100%}}\n"] }]
|
|
6310
6798
|
}] });
|
|
6311
6799
|
|
|
6312
6800
|
class MainDocumentationPage {
|
|
@@ -6330,6 +6818,7 @@ class MainDocumentationPage {
|
|
|
6330
6818
|
{ id: 'segment', label: this.translocoService.translate('tabs.segment') },
|
|
6331
6819
|
{ id: 'slider', label: this.translocoService.translate('tabs.slider') },
|
|
6332
6820
|
{ id: 'breadcrumb', label: this.translocoService.translate('tabs.breadcrumb') },
|
|
6821
|
+
{ id: 'selector', label: this.translocoService.translate('tabs.selector') },
|
|
6333
6822
|
{ id: 'svg', label: this.translocoService.translate('tabs.svg') },
|
|
6334
6823
|
];
|
|
6335
6824
|
activeTab = signal(this.tabs[0], { ...(ngDevMode ? { debugName: "activeTab" } : {}) });
|
|
@@ -6337,7 +6826,7 @@ class MainDocumentationPage {
|
|
|
6337
6826
|
this.activeTab.set(tab);
|
|
6338
6827
|
}
|
|
6339
6828
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: MainDocumentationPage, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6340
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: MainDocumentationPage, isStandalone: true, selector: "duck-dev-main-documentation-page", ngImport: i0, template: "<duck-dev-tab-vertical [tabs]=\"tabs\" (tabChange)=\"onTabChange($event)\">\n @switch (activeTab().id) {\n @case ('quick-start') {\n <app-quick-start-block />\n }\n @case ('accordion') {\n <app-accordion-block />\n }\n @case ('buttons') {\n <app-button-block />\n }\n @case ('loaders') {\n <app-loader-block />\n }\n @case ('progress') {\n <app-progress-bar-block />\n }\n @case ('tabs') {\n <app-tabs-block />\n }\n @case ('tooltip') {\n <app-tooltip-block />\n }\n @case ('badge') {\n <app-badge-block />\n }\n @case ('directives') {\n <app-directive-block />\n }\n @case ('card') {\n <app-card-block />\n }\n @case ('speaker-bubble') {\n <app-speaker-bubble-block />\n }\n @case ('modal') {\n <app-modal-block />\n }\n @case ('input') {\n <app-input-block />\n }\n @case ('notifications') {\n <app-notification-block />\n }\n @case ('slider') {\n <app-slider-block />\n }\n @case ('segment') {\n <app-segment-block />\n }\n @case ('breadcrumb') {\n <app-breadcrumb-block />\n }\n @case ('svg') {\n <app-duck-dev-svg-block />\n }\n }\n</duck-dev-tab-vertical>\n<duck-dev-notification-container />\n", styles: [":host{display:block;height:100%}\n"], dependencies: [{ kind: "component", type: ButtonBlock, selector: "app-button-block" }, { kind: "component", type: LoaderBlock, selector: "app-loader-block" }, { kind: "component", type: TabsBlock, selector: "app-tabs-block" }, { kind: "component", type: DuckDevSvgBlock, selector: "app-duck-dev-svg-block" }, { kind: "component", type: DuckDevTabVertical, selector: "duck-dev-tab-vertical", inputs: ["tabs"], outputs: ["tabChange"] }, { kind: "component", type: InputBlock, selector: "app-input-block" }, { kind: "component", type: NotificationBlock, selector: "app-notification-block" }, { kind: "component", type: DuckDevNotificationContainer, selector: "duck-dev-notification-container" }, { kind: "component", type: BadgeBlock, selector: "app-badge-block" }, { kind: "component", type: DirectiveBlock, selector: "app-directive-block" }, { kind: "component", type: AccordionBlock, selector: "app-accordion-block" }, { kind: "component", type: SliderBlock, selector: "app-slider-block" }, { kind: "component", type: CardBlock, selector: "app-card-block" }, { kind: "component", type: TooltipBlock, selector: "app-tooltip-block" }, { kind: "component", type: QuickStartBlock, selector: "app-quick-start-block" }, { kind: "component", type: ModalBlock, selector: "app-modal-block" }, { kind: "component", type: SegmentBlock, selector: "app-segment-block" }, { kind: "component", type: ProgressBarBlock, selector: "app-progress-bar-block" }, { kind: "component", type: SpeakerBubbleBlock, selector: "app-speaker-bubble-block" }, { kind: "component", type: BreadcrumbBlock, selector: "app-breadcrumb-block" }] });
|
|
6829
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: MainDocumentationPage, isStandalone: true, selector: "duck-dev-main-documentation-page", ngImport: i0, template: "<duck-dev-tab-vertical [tabs]=\"tabs\" (tabChange)=\"onTabChange($event)\">\n @switch (activeTab().id) {\n @case ('quick-start') {\n <app-quick-start-block />\n }\n @case ('accordion') {\n <app-accordion-block />\n }\n @case ('buttons') {\n <app-button-block />\n }\n @case ('loaders') {\n <app-loader-block />\n }\n @case ('progress') {\n <app-progress-bar-block />\n }\n @case ('tabs') {\n <app-tabs-block />\n }\n @case ('tooltip') {\n <app-tooltip-block />\n }\n @case ('badge') {\n <app-badge-block />\n }\n @case ('directives') {\n <app-directive-block />\n }\n @case ('card') {\n <app-card-block />\n }\n @case ('speaker-bubble') {\n <app-speaker-bubble-block />\n }\n @case ('modal') {\n <app-modal-block />\n }\n @case ('input') {\n <app-input-block />\n }\n @case ('notifications') {\n <app-notification-block />\n }\n @case ('slider') {\n <app-slider-block />\n }\n @case ('segment') {\n <app-segment-block />\n }\n @case ('breadcrumb') {\n <app-breadcrumb-block />\n }\n @case ('selector') {\n <app-selector-block />\n }\n @case ('svg') {\n <app-duck-dev-svg-block />\n }\n }\n</duck-dev-tab-vertical>\n<duck-dev-notification-container />\n", styles: [":host{display:block;height:100%}\n"], dependencies: [{ kind: "component", type: ButtonBlock, selector: "app-button-block" }, { kind: "component", type: LoaderBlock, selector: "app-loader-block" }, { kind: "component", type: TabsBlock, selector: "app-tabs-block" }, { kind: "component", type: DuckDevSvgBlock, selector: "app-duck-dev-svg-block" }, { kind: "component", type: DuckDevTabVertical, selector: "duck-dev-tab-vertical", inputs: ["tabs"], outputs: ["tabChange"] }, { kind: "component", type: InputBlock, selector: "app-input-block" }, { kind: "component", type: NotificationBlock, selector: "app-notification-block" }, { kind: "component", type: DuckDevNotificationContainer, selector: "duck-dev-notification-container" }, { kind: "component", type: BadgeBlock, selector: "app-badge-block" }, { kind: "component", type: DirectiveBlock, selector: "app-directive-block" }, { kind: "component", type: AccordionBlock, selector: "app-accordion-block" }, { kind: "component", type: SliderBlock, selector: "app-slider-block" }, { kind: "component", type: CardBlock, selector: "app-card-block" }, { kind: "component", type: TooltipBlock, selector: "app-tooltip-block" }, { kind: "component", type: QuickStartBlock, selector: "app-quick-start-block" }, { kind: "component", type: ModalBlock, selector: "app-modal-block" }, { kind: "component", type: SegmentBlock, selector: "app-segment-block" }, { kind: "component", type: ProgressBarBlock, selector: "app-progress-bar-block" }, { kind: "component", type: SpeakerBubbleBlock, selector: "app-speaker-bubble-block" }, { kind: "component", type: BreadcrumbBlock, selector: "app-breadcrumb-block" }, { kind: "component", type: SelectorBlock, selector: "app-selector-block" }] });
|
|
6341
6830
|
}
|
|
6342
6831
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: MainDocumentationPage, decorators: [{
|
|
6343
6832
|
type: Component,
|
|
@@ -6362,12 +6851,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
|
|
|
6362
6851
|
ProgressBarBlock,
|
|
6363
6852
|
SpeakerBubbleBlock,
|
|
6364
6853
|
BreadcrumbBlock,
|
|
6365
|
-
|
|
6854
|
+
SelectorBlock,
|
|
6855
|
+
], template: "<duck-dev-tab-vertical [tabs]=\"tabs\" (tabChange)=\"onTabChange($event)\">\n @switch (activeTab().id) {\n @case ('quick-start') {\n <app-quick-start-block />\n }\n @case ('accordion') {\n <app-accordion-block />\n }\n @case ('buttons') {\n <app-button-block />\n }\n @case ('loaders') {\n <app-loader-block />\n }\n @case ('progress') {\n <app-progress-bar-block />\n }\n @case ('tabs') {\n <app-tabs-block />\n }\n @case ('tooltip') {\n <app-tooltip-block />\n }\n @case ('badge') {\n <app-badge-block />\n }\n @case ('directives') {\n <app-directive-block />\n }\n @case ('card') {\n <app-card-block />\n }\n @case ('speaker-bubble') {\n <app-speaker-bubble-block />\n }\n @case ('modal') {\n <app-modal-block />\n }\n @case ('input') {\n <app-input-block />\n }\n @case ('notifications') {\n <app-notification-block />\n }\n @case ('slider') {\n <app-slider-block />\n }\n @case ('segment') {\n <app-segment-block />\n }\n @case ('breadcrumb') {\n <app-breadcrumb-block />\n }\n @case ('selector') {\n <app-selector-block />\n }\n @case ('svg') {\n <app-duck-dev-svg-block />\n }\n }\n</duck-dev-tab-vertical>\n<duck-dev-notification-container />\n", styles: [":host{display:block;height:100%}\n"] }]
|
|
6366
6856
|
}] });
|
|
6367
6857
|
|
|
6368
6858
|
const DuckDevLibTranslations = {
|
|
6369
|
-
en: import('./duck-dev-lib-en-
|
|
6370
|
-
ru: import('./duck-dev-lib-ru-
|
|
6859
|
+
en: import('./duck-dev-lib-en-XYugblp4.mjs'),
|
|
6860
|
+
ru: import('./duck-dev-lib-ru-BBQhEnLr.mjs'),
|
|
6371
6861
|
};
|
|
6372
6862
|
|
|
6373
6863
|
/*
|
|
@@ -6378,5 +6868,5 @@ const DuckDevLibTranslations = {
|
|
|
6378
6868
|
* Generated bundle index. Do not edit.
|
|
6379
6869
|
*/
|
|
6380
6870
|
|
|
6381
|
-
export { AccentEnumColor, Badge, BadgeNeobrutalSlab, BadgeNeobrutalStamp, BadgeNeobrutalTicket, ButtonBlurLift, ButtonCasper, ButtonFlip, ButtonGlideOver, ButtonNeobrutalBurst, ButtonNeobrutalSlab, ButtonNeobrutalSticker, ButtonNeobrutalTag, ButtonNeobrutalTape, ButtonNeobrutalZigzag, DdFlexDirectionDirective, DdTabPanel, DuckDevAccordionComponent as DuckDevAccordion, DuckDevAccordionNeobrutalComponent as DuckDevAccordionNeobrutal, DuckDevAccordionNeobrutalTapeComponent as DuckDevAccordionNeobrutalTape, DuckDevBreadcrumbClassic, DuckDevBreadcrumbNeobrutal, DuckDevCardAccent, DuckDevCardMinimal, DuckDevCardNeobrutalPoster, DuckDevCardNeobrutalSlab, DuckDevCardNeobrutalStamp, DuckDevCardNeobrutalTicket, DuckDevCardOutline, DuckDevCardSection, DuckDevCardSignal, DuckDevIcon, DuckDevInput, DuckDevInputNeobrutalPoster, DuckDevInputNeobrutalRadio, DuckDevInputNeobrutalSlab, DuckDevInputNeobrutalStrip, DuckDevInputNeobrutalToggle, DuckDevLibTranslations, DuckDevModalClassic, DuckDevNotification, DuckDevNotificationContainer, DuckDevNotificationService, DuckDevProgressLine, DuckDevProgressMeter, DuckDevProgressNeobrutalSlab, DuckDevProgressNeobrutalStamp, DuckDevProgressNeobrutalTicket, DuckDevProgressStack, DuckDevSegmentButton, DuckDevSegmentClassic, DuckDevSegmentNeobrutal, DuckDevSpeakerBubbleClassic, DuckDevSpeakerBubbleNeobrutalSlab, DuckDevSpeakerBubbleNeobrutalTicket, DuckDevSpeakerBubbleOutline, DuckDevSpeakerBubbleSoft, DuckDevTab, DuckDevTabNeobrutal, DuckDevTabVertical, DuckDevTooltip, DuckDevTooltipNeobrutalComponent, LoaderClassic, LoaderLoadingBubble, LoaderNeobrutalBars, LoaderNeobrutalMarquee, LoaderNeobrutalStamp, LoaderThreeDots, MainDocumentationPage, SliderClassic, getClassicSpeakerBubbleStyle, getNeobrutalSpeakerBubbleStyle, useSpeakerBubbleTail };
|
|
6871
|
+
export { AccentEnumColor, Badge, BadgeNeobrutalSlab, BadgeNeobrutalStamp, BadgeNeobrutalTicket, ButtonBlurLift, ButtonCasper, ButtonFlip, ButtonGlideOver, ButtonNeobrutalBurst, ButtonNeobrutalSlab, ButtonNeobrutalSticker, ButtonNeobrutalTag, ButtonNeobrutalTape, ButtonNeobrutalZigzag, DdFlexDirectionDirective, DdTabPanel, DuckDevAccordionComponent as DuckDevAccordion, DuckDevAccordionNeobrutalComponent as DuckDevAccordionNeobrutal, DuckDevAccordionNeobrutalTapeComponent as DuckDevAccordionNeobrutalTape, DuckDevBreadcrumbClassic, DuckDevBreadcrumbNeobrutal, DuckDevCardAccent, DuckDevCardMinimal, DuckDevCardNeobrutalPoster, DuckDevCardNeobrutalSlab, DuckDevCardNeobrutalStamp, DuckDevCardNeobrutalTicket, DuckDevCardOutline, DuckDevCardSection, DuckDevCardSignal, DuckDevIcon, DuckDevInput, DuckDevInputNeobrutalPoster, DuckDevInputNeobrutalRadio, DuckDevInputNeobrutalSlab, DuckDevInputNeobrutalStrip, DuckDevInputNeobrutalToggle, DuckDevLibTranslations, DuckDevModalClassic, DuckDevNotification, DuckDevNotificationContainer, DuckDevNotificationService, DuckDevProgressLine, DuckDevProgressMeter, DuckDevProgressNeobrutalSlab, DuckDevProgressNeobrutalStamp, DuckDevProgressNeobrutalTicket, DuckDevProgressStack, DuckDevSegmentButton, DuckDevSegmentClassic, DuckDevSegmentNeobrutal, DuckDevSegmentNeobrutalVertical, DuckDevSelectorDrum, DuckDevSelectorOption, DuckDevSpeakerBubbleClassic, DuckDevSpeakerBubbleNeobrutalSlab, DuckDevSpeakerBubbleNeobrutalTicket, DuckDevSpeakerBubbleOutline, DuckDevSpeakerBubbleSoft, DuckDevTab, DuckDevTabNeobrutal, DuckDevTabVertical, DuckDevTooltip, DuckDevTooltipNeobrutalComponent, LoaderClassic, LoaderLoadingBubble, LoaderNeobrutalBars, LoaderNeobrutalMarquee, LoaderNeobrutalStamp, LoaderThreeDots, MainDocumentationPage, SliderClassic, getClassicSpeakerBubbleStyle, getNeobrutalSelectorStyle, getNeobrutalSpeakerBubbleStyle, useSpeakerBubbleTail };
|
|
6382
6872
|
//# sourceMappingURL=duck-dev-lib.mjs.map
|