@life-cockpit/angular-ui-kit 2.13.0 → 2.14.0

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.
@@ -285,6 +285,19 @@ const ICON_ALIASES = {
285
285
  'document-duplicate': 'copy',
286
286
  'clipboard-document': 'clipboard',
287
287
  'clipboard-document-check': 'clipboard-check',
288
+ 'clipboard-document-list': 'clipboard-list',
289
+ 'archive-box': 'archive',
290
+ 'cpu-chip': 'cpu',
291
+ 'puzzle-piece': 'puzzle',
292
+ 'paper-airplane': 'send',
293
+ 'presentation-chart-bar': 'presentation-analytics',
294
+ 'chat-bubble-left': 'message-circle',
295
+ 'chat-bubble-left-right': 'messages',
296
+ 'building-office': 'building',
297
+ 'rocket-launch': 'rocket',
298
+ // Heroicon's logout arrow — v2 name plus the v1 spelling still in the wild.
299
+ 'arrow-right-start-on-rectangle': 'logout',
300
+ 'arrow-right-on-rectangle': 'logout',
288
301
  folder: 'folder',
289
302
  'folder-open': 'folder-open',
290
303
  envelope: 'mail',
@@ -504,7 +517,7 @@ const INLINE_ICON_SVGS = {
504
517
  * every documented alias ({@link ICON_ALIASES}) and inlined icon.
505
518
  * Stored space-joined and split at load to keep the bundle compact.
506
519
  */
507
- const ICON_NAMES = Object.freeze('a-b a-b-2 a-b-off abacus abacus-off abc access-point access-point-off accessible accessible-off account_balance acorn acrobatic activity activity-heartbeat ad ad-2 ad-circle ad-circle-off ad-off address-book address-book-off adjustments adjustments-alt adjustments-bolt adjustments-cancel adjustments-check adjustments-code adjustments-cog adjustments-dollar adjustments-down adjustments-exclamation adjustments-heart adjustments-horizontal adjustments-minus adjustments-off adjustments-pause adjustments-pin adjustments-plus adjustments-question adjustments-search adjustments-share adjustments-spark adjustments-star adjustments-up adjustments-x aerial-lift affiliate ai ai-agent ai-agents ai-gateway air-balloon air-conditioning air-conditioning-disabled air-traffic-control alarm alarm-average alarm-minus alarm-off alarm-plus alarm-smoke alarm-snooze album album-off alert-circle alert-circle-off alert-hexagon alert-hexagon-off alert-octagon alert-small alert-small-off alert-square alert-square-rounded alert-square-rounded-off alert-triangle alert-triangle-off alien align-box-bottom-center align-box-bottom-left align-box-bottom-right align-box-center-bottom align-box-center-middle align-box-center-stretch align-box-center-top align-box-left-bottom align-box-left-middle align-box-left-stretch align-box-left-top align-box-right-bottom align-box-right-middle align-box-right-stretch align-box-right-top align-box-top-center align-box-top-left align-box-top-right align-center align-justified align-left align-left-2 align-right align-right-2 alpha alphabet-arabic alphabet-bangla alphabet-cyrillic alphabet-greek alphabet-hebrew alphabet-korean alphabet-latin alphabet-polish alphabet-runes alphabet-thai alt ambulance ampersand analytics analyze analyze-off anchor anchor-off angle ankh antenna antenna-bars-1 antenna-bars-2 antenna-bars-3 antenna-bars-4 antenna-bars-5 antenna-bars-off antenna-off aperture aperture-off api api-app api-app-off api-book api-off app-window apple apps apps-off archery-arrow archive archive-off armchair armchair-2 armchair-2-off armchair-off arrow-autofit-content arrow-autofit-down arrow-autofit-height arrow-autofit-left arrow-autofit-right arrow-autofit-up arrow-autofit-width arrow-back arrow-back-up arrow-back-up-double arrow-badge-down arrow-badge-left arrow-badge-right arrow-badge-up arrow-bar-both arrow-bar-down arrow-bar-left arrow-bar-right arrow-bar-to-down arrow-bar-to-down-dashed arrow-bar-to-left arrow-bar-to-left-dashed arrow-bar-to-right arrow-bar-to-right-dashed arrow-bar-to-up arrow-bar-to-up-dashed arrow-bar-up arrow-bear-left arrow-bear-left-2 arrow-bear-right arrow-bear-right-2 arrow-big-down arrow-big-down-line arrow-big-down-lines arrow-big-left arrow-big-left-line arrow-big-left-lines arrow-big-right arrow-big-right-line arrow-big-right-lines arrow-big-up arrow-big-up-line arrow-big-up-lines arrow-bounce arrow-capsule arrow-curve-left arrow-curve-right arrow-down arrow-down-bar arrow-down-circle arrow-down-dashed arrow-down-from-arc arrow-down-left arrow-down-left-circle arrow-down-rhombus arrow-down-right arrow-down-right-circle arrow-down-square arrow-down-tail arrow-down-to-arc arrow-down-tray arrow-elbow-left arrow-elbow-right arrow-fork arrow-forward arrow-forward-up arrow-forward-up-double arrow-guide arrow-iteration arrow-left arrow-left-bar arrow-left-circle arrow-left-dashed arrow-left-from-arc arrow-left-rhombus arrow-left-right arrow-left-square arrow-left-tail arrow-left-to-arc arrow-loop-left arrow-loop-left-2 arrow-loop-right arrow-loop-right-2 arrow-merge arrow-merge-alt-left arrow-merge-alt-right arrow-merge-both arrow-merge-left arrow-merge-right arrow-move-down arrow-move-left arrow-move-right arrow-move-up arrow-narrow-down arrow-narrow-down-dashed arrow-narrow-left arrow-narrow-left-dashed arrow-narrow-right arrow-narrow-right-dashed arrow-narrow-up arrow-narrow-up-dashed arrow-path arrow-ramp-left arrow-ramp-left-2 arrow-ramp-left-3 arrow-ramp-right arrow-ramp-right-2 arrow-ramp-right-3 arrow-right arrow-right-bar arrow-right-circle arrow-right-dashed arrow-right-from-arc arrow-right-rhombus arrow-right-square arrow-right-tail arrow-right-to-arc arrow-rotary-first-left arrow-rotary-first-right arrow-rotary-last-left arrow-rotary-last-right arrow-rotary-left arrow-rotary-right arrow-rotary-straight arrow-roundabout-left arrow-roundabout-right arrow-sharp-turn-left arrow-sharp-turn-right arrow-top-right-on-square arrow-trending-down arrow-trending-up arrow-up arrow-up-bar arrow-up-circle arrow-up-dashed arrow-up-from-arc arrow-up-left arrow-up-left-circle arrow-up-rhombus arrow-up-right arrow-up-right-circle arrow-up-square arrow-up-tail arrow-up-to-arc arrow-up-tray arrow-wave-left-down arrow-wave-left-up arrow-wave-right-down arrow-wave-right-up arrow-zig-zag arrows-cross arrows-diagonal arrows-diagonal-2 arrows-diagonal-minimize arrows-diagonal-minimize-2 arrows-diff arrows-double-ne-sw arrows-double-nw-se arrows-double-se-nw arrows-double-sw-ne arrows-down arrows-down-up arrows-exchange arrows-exchange-2 arrows-horizontal arrows-join arrows-join-2 arrows-left arrows-left-down arrows-left-right arrows-maximize arrows-minimize arrows-move arrows-move-horizontal arrows-move-vertical arrows-pointing-in arrows-pointing-out arrows-random arrows-right arrows-right-down arrows-right-left arrows-shuffle arrows-shuffle-2 arrows-sort arrows-split arrows-split-2 arrows-transfer-down arrows-transfer-up arrows-transfer-up-down arrows-up arrows-up-down arrows-up-left arrows-up-right arrows-vertical artboard artboard-off article article-off aspect-ratio aspect-ratio-off assembly assembly-off asset asterisk asterisk-simple at at-off atom atom-2 atom-off augmented-reality augmented-reality-2 augmented-reality-off auth-2fa automatic-gearbox automation avocado award award-off axe axis-x axis-y baby-bottle baby-carriage background backhoe backpack backpack-off backslash backspace badge badge-2k badge-3d badge-3k badge-4k badge-5k badge-8k badge-ad badge-ad-off badge-ar badge-cc badge-hd badge-off badge-sd badge-tm badge-vo badge-vr badge-wc badges badges-off baguette ball-american-football ball-american-football-off ball-baseball ball-basketball ball-bowling ball-football ball-football-off ball-tennis ball-volleyball balloon balloon-off ballpen ballpen-off ban banana bandage bandage-off banknotes barbell barbell-off barcode barcode-off barrel barrel-off barrier-block barrier-block-off bars-3 bars-3-bottom-left bars-3-bottom-right baseline baseline-density-large baseline-density-medium baseline-density-small basket basket-bolt basket-cancel basket-check basket-code basket-cog basket-discount basket-dollar basket-down basket-exclamation basket-heart basket-minus basket-off basket-pause basket-pin basket-plus basket-question basket-search basket-share basket-star basket-up basket-x bat bath bath-off battery battery-1 battery-2 battery-3 battery-4 battery-automotive battery-charging battery-charging-2 battery-eco battery-exclamation battery-off battery-spark battery-vertical battery-vertical-1 battery-vertical-2 battery-vertical-3 battery-vertical-4 battery-vertical-charging battery-vertical-charging-2 battery-vertical-eco battery-vertical-exclamation battery-vertical-off beach beach-off bed bed-flat bed-off beer beer-off bell bell-alert bell-bolt bell-cancel bell-check bell-code bell-cog bell-dollar bell-down bell-exclamation bell-heart bell-minus bell-off bell-pause bell-pin bell-plus bell-question bell-ringing bell-ringing-2 bell-school bell-search bell-share bell-slash bell-star bell-up bell-x bell-z beta bible bike bike-off binary binary-off binary-tree binary-tree-2 binoculars biohazard biohazard-off blade bleach bleach-chlorine bleach-no-chlorine bleach-off blend-mode blender blind blob blockquote blocks bluetooth bluetooth-connected bluetooth-off bluetooth-x blur blur-off bmp body-scan bold bold-off bolt bolt-off bomb bone bone-off bong bong-off book book-2 book-download book-off book-upload bookmark bookmark-ai bookmark-edit bookmark-minus bookmark-off bookmark-plus bookmark-question bookmarks bookmarks-off books books-off boom border-all border-bottom border-bottom-plus border-corner-ios border-corner-pill border-corner-rounded border-corner-square border-corners border-horizontal border-inner border-left border-left-plus border-none border-outer border-radius border-right border-right-plus border-sides border-style border-style-2 border-top border-top-plus border-vertical bot-id bottle bottle-off bounce-left bounce-right bow bowl bowl-chopsticks bowl-spoon bowling box box-align-bottom box-align-bottom-left box-align-bottom-right box-align-left box-align-right box-align-top box-align-top-left box-align-top-right box-margin box-model box-model-2 box-model-2-off box-model-off box-multiple box-multiple-0 box-multiple-1 box-multiple-2 box-multiple-3 box-multiple-4 box-multiple-5 box-multiple-6 box-multiple-7 box-multiple-8 box-multiple-9 box-off box-padding braces braces-off brackets brackets-angle brackets-angle-off brackets-contain brackets-contain-end brackets-contain-start brackets-off braille brain brand-4chan brand-abstract brand-adobe brand-adobe-after-effect brand-adobe-illustrator brand-adobe-indesign brand-adobe-photoshop brand-adobe-premiere brand-adobe-xd brand-adonis-js brand-airbnb brand-airtable brand-algolia brand-alipay brand-alpine-js brand-amazon brand-amd brand-amie brand-amigo brand-among-us brand-android brand-angular brand-ansible brand-ao3 brand-appgallery brand-apple brand-apple-arcade brand-apple-news brand-apple-podcast brand-appstore brand-arc brand-asana brand-astro brand-audible brand-auth0 brand-aws brand-azure brand-backbone brand-badoo brand-baidu brand-bandcamp brand-bandlab brand-beats brand-bebo brand-behance brand-bilibili brand-binance brand-bing brand-bitbucket brand-blackberry brand-blender brand-blogger brand-bluesky brand-booking brand-bootstrap brand-bulma brand-bumble brand-bunpo brand-c-sharp brand-cake brand-cakephp brand-campaignmonitor brand-carbon brand-cashapp brand-chrome brand-cinema-4d brand-citymapper brand-cloudflare brand-codecov brand-codepen brand-codesandbox brand-cohost brand-coinbase brand-comedy-central brand-coreos brand-couchdb brand-couchsurfing brand-cpp brand-craft brand-crunchbase brand-css3 brand-ctemplar brand-cucumber brand-cupra brand-cypress brand-d3 brand-databricks brand-days-counter brand-dcos brand-debian brand-deezer brand-deliveroo brand-deno brand-denodo brand-deviantart brand-digg brand-dingtalk brand-discord brand-disney brand-disqus brand-django brand-docker brand-doctrine brand-dolby-digital brand-douban brand-dribbble brand-dropbox brand-drops brand-drupal brand-edge brand-elastic brand-electronic-arts brand-ember brand-envato brand-etsy brand-evernote brand-facebook brand-feedly brand-figma brand-filezilla brand-finder brand-firebase brand-firefox brand-fiverr brand-flickr brand-flightradar24 brand-flipboard brand-flutter brand-fortnite brand-foursquare brand-framer brand-framer-motion brand-funimation brand-gatsby brand-git brand-github brand-github-copilot brand-gitlab brand-gmail brand-golang brand-google brand-google-analytics brand-google-big-query brand-google-drive brand-google-fit brand-google-home brand-google-maps brand-google-one brand-google-photos brand-google-play brand-google-podcasts brand-grammarly brand-graphql brand-gravatar brand-grindr brand-guardian brand-gumroad brand-hackerrank brand-hbo brand-headlessui brand-hexo brand-hipchat brand-html5 brand-inertia brand-infakt brand-instagram brand-intercom brand-itch brand-javascript brand-jira brand-juejin brand-kako-talk brand-kbin brand-kick brand-kickstarter brand-kotlin brand-laravel brand-lastfm brand-leetcode brand-letterboxd brand-line brand-linkedin brand-linktree brand-linqpad brand-livewire brand-loom brand-mailgun brand-mantine brand-mastercard brand-mastodon brand-matrix brand-mcdonalds brand-medium brand-meetup brand-mercedes brand-messenger brand-meta brand-metabrainz brand-minecraft brand-miniprogram brand-mixpanel brand-monday brand-mongodb brand-my-oppo brand-mysql brand-national-geographic brand-nem brand-netbeans brand-netease-music brand-netflix brand-nexo brand-nextcloud brand-nextjs brand-nodejs brand-nord-vpn brand-notion brand-npm brand-nuxt brand-nytimes brand-oauth brand-office brand-ok-ru brand-onedrive brand-onlyfans brand-open-source brand-openai brand-openvpn brand-opera brand-pagekit brand-parsinta brand-patreon brand-paypal brand-paypay brand-peanut brand-pepsi brand-php brand-picsart brand-pinterest brand-planetscale brand-pnpm brand-pocket brand-polymer brand-powershell brand-printables brand-prisma brand-producthunt brand-pushbullet brand-pushover brand-python brand-qq brand-radix-ui brand-react brand-react-native brand-reason brand-reddit brand-redhat brand-redux brand-revolut brand-rumble brand-rust brand-safari brand-samsungpass brand-sass brand-sentry brand-sharik brand-shazam brand-shopee brand-sketch brand-skype brand-slack brand-snapchat brand-snapseed brand-snowflake brand-socket-io brand-solidjs brand-soundcloud brand-spacehey brand-speedtest brand-spotify brand-stackoverflow brand-stackshare brand-steam brand-stellar brand-stocktwits brand-storj brand-storybook brand-storytel brand-strava brand-stripe brand-sublime-text brand-sugarizer brand-supabase brand-superhuman brand-supernova brand-surfshark brand-svelte brand-swift brand-symfony brand-tabler brand-tabnine brand-tailwind brand-taobao brand-teams brand-ted brand-telegram brand-terraform brand-tesla brand-tether brand-thingiverse brand-threads brand-threejs brand-tidal brand-tiktok brand-tinder brand-topbuzz brand-torchain brand-toyota brand-trello brand-tripadvisor brand-tumblr brand-twilio brand-twitch brand-twitter brand-typescript brand-uber brand-ubuntu brand-unity brand-unsplash brand-upwork brand-valorant brand-vechain brand-vercel brand-vimeo brand-vinted brand-visa brand-visual-studio brand-vite brand-vivaldi brand-vk brand-vlc brand-volkswagen brand-vsco brand-vscode brand-vue brand-walmart brand-waze brand-webflow brand-wechat brand-weibo brand-whatsapp brand-wikipedia brand-windows brand-windy brand-wish brand-wix brand-wordpress brand-x brand-xamarin brand-xbox brand-xdeep brand-xing brand-yahoo brand-yandex brand-yarn brand-yatse brand-ycombinator brand-youtube brand-youtube-kids brand-zalando brand-zapier brand-zeit brand-zhihu brand-zoom brand-zulip brand-zwift bread bread-off briefcase briefcase-2 briefcase-off brightness brightness-2 brightness-auto brightness-down brightness-half brightness-off brightness-up broadcast broadcast-off browser browser-check browser-maximize browser-minus browser-off browser-plus browser-share browser-x brush brush-off bubble bubble-minus bubble-plus bubble-tea bubble-tea-2 bubble-text bubble-x bucket bucket-droplet bucket-off bug bug-off building building-airport building-arch building-bank building-bridge building-bridge-2 building-broadcast-tower building-burj-al-arab building-carousel building-castle building-church building-circus building-cog building-community building-cottage building-eiffel-tower building-estate building-factory building-factory-2 building-fortress building-hospital building-library building-lighthouse building-minus building-monument building-mosque building-off building-pavilion building-plus building-skyscraper building-stadium building-store building-tunnel building-warehouse building-wind-turbine buildings bulb bulb-off bulldozer burger bus bus-off bus-stop businessplan butterfly cactus cactus-off cake cake-off cake-roll calculator calculator-off calendar calendar-bolt calendar-cancel calendar-check calendar-clock calendar-code calendar-cog calendar-dollar calendar-dot calendar-down calendar-due calendar-event calendar-exclamation calendar-heart calendar-minus calendar-month calendar-off calendar-pause calendar-pin calendar-plus calendar-question calendar-repeat calendar-sad calendar-search calendar-share calendar-smile calendar-star calendar-stats calendar-time calendar-up calendar-user calendar-week calendar-x camera camera-ai camera-bitcoin camera-bolt camera-cancel camera-check camera-code camera-cog camera-dollar camera-down camera-exclamation camera-heart camera-minus camera-moon camera-off camera-pause camera-pin camera-plus camera-question camera-rotate camera-search camera-selfie camera-share camera-spark camera-star camera-up camera-x camper campfire canary cancel candle candy candy-off cane cannabis cap-projecting cap-rounded cap-straight capsule capsule-horizontal capture capture-off car car-4wd car-crane car-crash car-door car-fan car-fan-1 car-fan-2 car-fan-3 car-fan-auto car-garage car-lifter car-off car-off-road car-suspension car-suv car-turbine carambola caravan cardboards cardboards-off cards caret-down caret-left caret-left-right caret-right caret-up caret-up-down carousel-horizontal carousel-vertical carrot carrot-off cash cash-banknote cash-banknote-edit cash-banknote-heart cash-banknote-minus cash-banknote-move cash-banknote-move-back cash-banknote-off cash-banknote-plus cash-edit cash-heart cash-minus cash-move cash-move-back cash-off cash-plus cash-register cast cast-off cat category category-2 category-minus category-plus ce ce-off cell cell-signal-1 cell-signal-2 cell-signal-3 cell-signal-4 cell-signal-5 cell-signal-off certificate certificate-2 certificate-2-off certificate-off chair-director chalkboard chalkboard-off chalkboard-teacher charging-pile chart-arcs chart-arcs-3 chart-area chart-area-line chart-arrows chart-arrows-vertical chart-bar chart-bar-off chart-bar-popular chart-bar-square chart-bubble chart-candle chart-circles chart-cohort chart-column chart-covariate chart-donut chart-donut-2 chart-donut-3 chart-donut-4 chart-dots chart-dots-2 chart-dots-3 chart-funnel chart-grid-dots chart-histogram chart-infographic chart-line chart-pie chart-pie-2 chart-pie-3 chart-pie-4 chart-pie-off chart-ppf chart-radar chart-sankey chart-scatter chart-scatter-3d chart-treemap check check-circle checkbox checklist checks checkup-list cheese chef-hat chef-hat-off cherry chess chess-bishop chess-king chess-knight chess-queen chess-rook chevron-compact-down chevron-compact-left chevron-compact-right chevron-compact-up chevron-down chevron-down-left chevron-down-right chevron-left chevron-left-pipe chevron-right chevron-right-pipe chevron-up chevron-up-left chevron-up-right chevrons-down chevrons-down-left chevrons-down-right chevrons-left chevrons-right chevrons-up chevrons-up-left chevrons-up-right chisel chocolate christmas-ball christmas-tree christmas-tree-off circle circle-arrow-down circle-arrow-down-left circle-arrow-down-right circle-arrow-left circle-arrow-right circle-arrow-up circle-arrow-up-left circle-arrow-up-right circle-asterisk circle-caret-down circle-caret-left circle-caret-right circle-caret-up circle-check circle-chevron-down circle-chevron-left circle-chevron-right circle-chevron-up circle-chevrons-down circle-chevrons-left circle-chevrons-right circle-chevrons-up circle-dashed circle-dashed-check circle-dashed-letter-a circle-dashed-letter-b circle-dashed-letter-c circle-dashed-letter-d circle-dashed-letter-e circle-dashed-letter-f circle-dashed-letter-g circle-dashed-letter-h circle-dashed-letter-i circle-dashed-letter-j circle-dashed-letter-k circle-dashed-letter-l circle-dashed-letter-m circle-dashed-letter-n circle-dashed-letter-o circle-dashed-letter-p circle-dashed-letter-q circle-dashed-letter-r circle-dashed-letter-s circle-dashed-letter-t circle-dashed-letter-u circle-dashed-letter-v circle-dashed-letter-w circle-dashed-letter-x circle-dashed-letter-y circle-dashed-letter-z circle-dashed-minus circle-dashed-number-0 circle-dashed-number-1 circle-dashed-number-2 circle-dashed-number-3 circle-dashed-number-4 circle-dashed-number-5 circle-dashed-number-6 circle-dashed-number-7 circle-dashed-number-8 circle-dashed-number-9 circle-dashed-percentage circle-dashed-plus circle-dashed-x circle-dot circle-dotted circle-dotted-letter-a circle-dotted-letter-b circle-dotted-letter-c circle-dotted-letter-d circle-dotted-letter-e circle-dotted-letter-f circle-dotted-letter-g circle-dotted-letter-h circle-dotted-letter-i circle-dotted-letter-j circle-dotted-letter-k circle-dotted-letter-l circle-dotted-letter-m circle-dotted-letter-n circle-dotted-letter-o circle-dotted-letter-p circle-dotted-letter-q circle-dotted-letter-r circle-dotted-letter-s circle-dotted-letter-t circle-dotted-letter-u circle-dotted-letter-v circle-dotted-letter-w circle-dotted-letter-x circle-dotted-letter-y circle-dotted-letter-z circle-half circle-half-2 circle-half-vertical circle-key circle-letter-a circle-letter-b circle-letter-c circle-letter-d circle-letter-e circle-letter-f circle-letter-g circle-letter-h circle-letter-i circle-letter-j circle-letter-k circle-letter-l circle-letter-m circle-letter-n circle-letter-o circle-letter-p circle-letter-q circle-letter-r circle-letter-s circle-letter-t circle-letter-u circle-letter-v circle-letter-w circle-letter-x circle-letter-y circle-letter-z circle-minus circle-minus-2 circle-number-0 circle-number-1 circle-number-2 circle-number-3 circle-number-4 circle-number-5 circle-number-6 circle-number-7 circle-number-8 circle-number-9 circle-off circle-open-arrow-down circle-open-arrow-left circle-open-arrow-right circle-open-arrow-up circle-percentage circle-plus circle-plus-2 circle-plus-minus circle-rectangle circle-rectangle-off circle-square circle-triangle circle-x circles circles-relation circuit-ammeter circuit-battery circuit-bulb circuit-capacitor circuit-capacitor-polarized circuit-cell circuit-cell-plus circuit-changeover circuit-diode circuit-diode-zener circuit-ground circuit-ground-digital circuit-inductor circuit-motor circuit-pushbutton circuit-resistor circuit-switch-closed circuit-switch-open circuit-voltmeter clear-all clear-formatting clef clef-staff click cliff-jumping clipboard clipboard-check clipboard-copy clipboard-data clipboard-document clipboard-document-check clipboard-heart clipboard-list clipboard-off clipboard-plus clipboard-search clipboard-smile clipboard-text clipboard-typography clipboard-x clock clock-12 clock-2 clock-24 clock-bitcoin clock-bolt clock-cancel clock-check clock-code clock-cog clock-dollar clock-down clock-edit clock-exclamation clock-heart clock-hour-1 clock-hour-10 clock-hour-11 clock-hour-12 clock-hour-2 clock-hour-3 clock-hour-4 clock-hour-5 clock-hour-6 clock-hour-7 clock-hour-8 clock-hour-9 clock-minus clock-off clock-pause clock-pin clock-play clock-plus clock-question clock-record clock-search clock-share clock-shield clock-star clock-stop clock-up clock-x clothes-rack clothes-rack-off cloud cloud-arrow-down cloud-arrow-up cloud-bitcoin cloud-bolt cloud-cancel cloud-check cloud-code cloud-cog cloud-computing cloud-data-connection cloud-dollar cloud-down cloud-download cloud-exclamation cloud-fog cloud-heart cloud-lock cloud-lock-open cloud-minus cloud-network cloud-off cloud-pause cloud-pin cloud-plus cloud-question cloud-rain cloud-search cloud-share cloud-snow cloud-star cloud-storm cloud-up cloud-upload cloud-x clover clover-2 clubs code code-ai code-asterisk code-circle code-circle-2 code-dots code-minus code-off code-plus code-variable code-variable-minus code-variable-plus codeblock coffee coffee-off coffin cog cog-6-tooth cog-8-tooth coin coin-bitcoin coin-euro coin-monero coin-off coin-pound coin-rupee coin-taka coin-yen coin-yuan coins color-filter color-picker color-picker-off color-swatch color-swatch-off column-insert-left column-insert-right column-remove columns columns-1 columns-2 columns-3 columns-off comet command command-off compass compass-off components components-off cone cone-2 cone-off cone-plus confetti confetti-off confucius congruent-to connection container container-off contract contrast contrast-2 contrast-2-off contrast-off cooker cookie cookie-man cookie-off copy copy-check copy-minus copy-off copy-plus copy-x copyleft copyleft-off copyright copyright-off corner-down-left corner-down-left-double corner-down-right corner-down-right-double corner-left-down corner-left-down-double corner-left-up corner-left-up-double corner-right-down corner-right-down-double corner-right-up corner-right-up-double corner-up-left corner-up-left-double corner-up-right corner-up-right-double cpu cpu-2 cpu-off crane crane-off create creative-commons creative-commons-by creative-commons-nc creative-commons-nd creative-commons-off creative-commons-sa creative-commons-zero credit-card credit-card-hand credit-card-off credit-card-pay credit-card-refund credits cricket crop crop-1-1 crop-16-9 crop-3-2 crop-5-4 crop-7-5 crop-landscape crop-portrait cross cross-off crosshair crown crown-off crutches crutches-off crystal-ball csv cube cube-3d-sphere cube-3d-sphere-off cube-off cube-plus cube-send cube-spark cube-unfolded cup cup-off curling curly-loop currency currency-afghani currency-bahraini currency-baht currency-bitcoin currency-cent currency-dinar currency-dirham currency-dogecoin currency-dollar currency-dollar-australian currency-dollar-brunei currency-dollar-canadian currency-dollar-guyanese currency-dollar-off currency-dollar-singapore currency-dollar-zimbabwean currency-dong currency-dram currency-ethereum currency-euro currency-euro-off currency-florin currency-forint currency-frank currency-guarani currency-hryvnia currency-husd currency-iranian-rial currency-kip currency-krone-czech currency-krone-danish currency-krone-swedish currency-lari currency-leu currency-lira currency-litecoin currency-lyd currency-manat currency-monero currency-naira currency-nano currency-off currency-paanga currency-peso currency-pound currency-pound-off currency-quetzal currency-real currency-renminbi currency-ripple currency-riyal currency-rubel currency-rufiyaa currency-rupee currency-rupee-nepalese currency-shekel currency-solana currency-som currency-taka currency-tenge currency-tether currency-tugrik currency-won currency-xrp currency-yen currency-yen-off currency-yuan currency-zcash currency-zloty current-location current-location-off cursor-off cursor-text cut cylinder cylinder-off cylinder-plus dashboard dashboard-off database database-cog database-dollar database-edit database-exclamation database-export database-heart database-import database-leak database-minus database-off database-plus database-search database-share database-smile database-star database-x deaf decimal deer delta dental dental-broken dental-off deselect desk details details-off device-3d-camera device-3d-lens device-airpods device-airpods-case device-airtag device-analytics device-audio-tape device-camera-phone device-cctv device-cctv-off device-computer-camera device-computer-camera-2 device-computer-camera-off device-desktop device-desktop-analytics device-desktop-bolt device-desktop-cancel device-desktop-check device-desktop-code device-desktop-cog device-desktop-dollar device-desktop-down device-desktop-exclamation device-desktop-heart device-desktop-minus device-desktop-off device-desktop-pause device-desktop-pin device-desktop-plus device-desktop-question device-desktop-search device-desktop-share device-desktop-star device-desktop-up device-desktop-x device-floppy device-gamepad device-gamepad-2 device-gamepad-3 device-heart-monitor device-imac device-imac-bolt device-imac-cancel device-imac-check device-imac-code device-imac-cog device-imac-dollar device-imac-down device-imac-exclamation device-imac-heart device-imac-minus device-imac-off device-imac-pause device-imac-pin device-imac-plus device-imac-question device-imac-search device-imac-share device-imac-star device-imac-up device-imac-x device-ipad device-ipad-bolt device-ipad-cancel device-ipad-check device-ipad-code device-ipad-cog device-ipad-dollar device-ipad-down device-ipad-exclamation device-ipad-heart device-ipad-horizontal device-ipad-horizontal-bolt device-ipad-horizontal-cancel device-ipad-horizontal-check device-ipad-horizontal-code device-ipad-horizontal-cog device-ipad-horizontal-dollar device-ipad-horizontal-down device-ipad-horizontal-exclamation device-ipad-horizontal-heart device-ipad-horizontal-minus device-ipad-horizontal-off device-ipad-horizontal-pause device-ipad-horizontal-pin device-ipad-horizontal-plus device-ipad-horizontal-question device-ipad-horizontal-search device-ipad-horizontal-share device-ipad-horizontal-star device-ipad-horizontal-up device-ipad-horizontal-x device-ipad-minus device-ipad-off device-ipad-pause device-ipad-pin device-ipad-plus device-ipad-question device-ipad-search device-ipad-share device-ipad-star device-ipad-up device-ipad-x device-landline-phone device-laptop device-laptop-off device-mobile device-mobile-bolt device-mobile-cancel device-mobile-charging device-mobile-check device-mobile-code device-mobile-cog device-mobile-dollar device-mobile-down device-mobile-exclamation device-mobile-heart device-mobile-message device-mobile-minus device-mobile-off device-mobile-pause device-mobile-pin device-mobile-plus device-mobile-question device-mobile-rotated device-mobile-search device-mobile-share device-mobile-star device-mobile-up device-mobile-vibration device-mobile-x device-nintendo device-nintendo-off device-projector device-remote device-screen device-sd-card device-sim device-sim-1 device-sim-2 device-sim-3 device-speaker device-speaker-off device-tablet device-tablet-bolt device-tablet-cancel device-tablet-check device-tablet-code device-tablet-cog device-tablet-dollar device-tablet-down device-tablet-exclamation device-tablet-heart device-tablet-minus device-tablet-off device-tablet-pause device-tablet-pin device-tablet-plus device-tablet-question device-tablet-search device-tablet-share device-tablet-star device-tablet-up device-tablet-x device-tv device-tv-off device-tv-old device-unknown device-usb device-vision-pro device-watch device-watch-bolt device-watch-cancel device-watch-check device-watch-code device-watch-cog device-watch-dollar device-watch-down device-watch-exclamation device-watch-heart device-watch-minus device-watch-off device-watch-pause device-watch-pin device-watch-plus device-watch-question device-watch-search device-watch-share device-watch-star device-watch-stats device-watch-stats-2 device-watch-up device-watch-x devices devices-2 devices-bolt devices-cancel devices-check devices-code devices-cog devices-dollar devices-down devices-exclamation devices-heart devices-minus devices-off devices-pause devices-pc devices-pc-off devices-pin devices-plus devices-question devices-search devices-share devices-star devices-up devices-x diabolo diabolo-off diabolo-plus dialpad dialpad-off diamond diamond-off diamonds diaper dice dice-1 dice-2 dice-3 dice-4 dice-5 dice-6 dimensions direction direction-arrows direction-horizontal direction-sign direction-sign-off directions directions-off disabled disabled-2 disabled-off disc disc-golf disc-off discount discount-off divide dna dna-2 dna-2-off dna-off document document-duplicate document-text dog dog-bowl done door door-enter door-exit door-hanger door-off dots dots-circle-horizontal dots-diagonal dots-diagonal-2 dots-vertical download download-off drag-drop drag-drop-2 drone drone-off drop-circle droplet droplet-bolt droplet-cancel droplet-check droplet-code droplet-cog droplet-dollar droplet-down droplet-exclamation droplet-half droplet-half-2 droplet-heart droplet-minus droplet-off droplet-pause droplet-pin droplet-plus droplet-question droplet-search droplet-share droplet-star droplet-up droplet-x droplets dual-screen dumbbell dumpling e-passport ear ear-off ear-scan earphone-bluetooth ease-in ease-in-control-point ease-in-out ease-in-out-control-points ease-out ease-out-control-point edit edit-circle edit-circle-off edit-off egg egg-cracked egg-fried egg-off eggs elevator elevator-off ellipsis-horizontal ellipsis-vertical email-stamp emergency-bed empathize empathize-off emphasis engine engine-off envelope equal equal-double equal-not eraser eraser-off error error-404 error-404-off escalator escalator-down escalator-up exchange exchange-off exclamation-circle exclamation-mark exclamation-mark-off exclamation-triangle exercise-ball explicit explicit-off exposure exposure-0 exposure-minus-1 exposure-minus-2 exposure-off exposure-plus-1 exposure-plus-2 external-link external-link-off eye eye-bitcoin eye-bolt eye-cancel eye-check eye-closed eye-code eye-cog eye-discount eye-dollar eye-dotted eye-down eye-edit eye-exclamation eye-heart eye-minus eye-off eye-pause eye-pin eye-plus eye-question eye-search eye-share eye-slash eye-spark eye-star eye-table eye-up eye-x eyeglass eyeglass-2 eyeglass-off face-id face-id-error face-mask face-mask-off fall favicon feather feather-off fence fence-off ferry fidget-spinner file file-3d file-ai file-alert file-analytics file-arrow-left file-arrow-right file-barcode file-bitcoin file-broken file-certificate file-chart file-check file-code file-code-2 file-cv file-database file-delta file-description file-diff file-digit file-dislike file-dollar file-dots file-download file-euro file-excel file-export file-function file-horizontal file-import file-infinity file-info file-invoice file-isr file-lambda file-like file-minus file-music file-neutral file-off file-orientation file-pencil file-percent file-phone file-plus file-power file-report file-rss file-sad file-scissors file-search file-settings file-shredder file-signal file-smile file-spark file-spreadsheet file-stack file-star file-symlink file-text file-text-ai file-text-shield file-text-spark file-time file-type-bmp file-type-css file-type-csv file-type-doc file-type-docx file-type-html file-type-jpg file-type-js file-type-jsx file-type-pdf file-type-php file-type-png file-type-ppt file-type-rs file-type-sql file-type-svg file-type-ts file-type-tsx file-type-txt file-type-vue file-type-xls file-type-xml file-type-zip file-typography file-unknown file-upload file-vector file-word file-x file-zip files files-off filter filter-2 filter-2-bolt filter-2-cancel filter-2-check filter-2-code filter-2-cog filter-2-discount filter-2-dollar filter-2-down filter-2-edit filter-2-exclamation filter-2-minus filter-2-pause filter-2-pin filter-2-plus filter-2-question filter-2-search filter-2-share filter-2-spark filter-2-up filter-2-x filter-bolt filter-cancel filter-check filter-code filter-cog filter-discount filter-dollar filter-down filter-edit filter-exclamation filter-heart filter-minus filter-off filter-pause filter-pin filter-plus filter-question filter-search filter-share filter-spark filter-star filter-up filter-x filters fingerprint fingerprint-off fingerprint-scan fire-extinguisher fire-hydrant fire-hydrant-off firetruck firewall-check firewall-flame first-aid-kit first-aid-kit-off fish fish-bone fish-christianity fish-hook fish-hook-off fish-off flag flag-2 flag-2-off flag-3 flag-bitcoin flag-bolt flag-cancel flag-check flag-code flag-cog flag-discount flag-dollar flag-down flag-exclamation flag-heart flag-minus flag-off flag-pause flag-pin flag-plus flag-question flag-search flag-share flag-spark flag-star flag-up flag-x flame flame-off flare flask flask-2 flask-2-off flask-off flip-flops flip-horizontal flip-vertical float-center float-left float-none float-right flood flower flower-off focus focus-2 focus-auto focus-centered fold fold-down fold-up folder folder-bolt folder-cancel folder-check folder-code folder-cog folder-dollar folder-down folder-exclamation folder-heart folder-minus folder-off folder-open folder-pause folder-pin folder-plus folder-question folder-root folder-search folder-share folder-star folder-symlink folder-up folder-x folders folders-off foodsteps forbid forbid-2 forklift forms fountain fountain-off frame frame-off free-rights freeze-column freeze-row freeze-row-column fridge fridge-off friends friends-off frustum frustum-off frustum-plus function function-off galaxy garden-cart garden-cart-off gas-station gas-station-off gauge gauge-off gavel gender-agender gender-androgyne gender-bigender gender-demiboy gender-demigirl gender-epicene gender-female gender-femme gender-genderfluid gender-genderless gender-genderqueer gender-hermaphrodite gender-intergender gender-male gender-neutrois gender-third gender-transgender gender-trasvesti geometry ghost ghost-2 ghost-3 ghost-off gif gift gift-card gift-off git-branch git-branch-deleted git-cherry-pick git-commit git-compare git-fork git-merge git-pull-request git-pull-request-closed git-pull-request-conflict git-pull-request-draft gizmo glass glass-champagne glass-cocktail glass-full glass-gin glass-off globe globe-alt globe-off go-game golf golf-off gps gradienter grain grape graph graph-off grave grave-2 grid-3x3 grid-4x4 grid-dots grid-goldenratio grid-pattern grid-scan grill grill-fork grill-off grill-spatula grip-horizontal grip-vertical growth guitar-pick gymnastics h-1 h-2 h-3 h-4 h-5 h-6 hammer hammer-drill hammer-off hand-click hand-click-off hand-finger hand-finger-down hand-finger-left hand-finger-off hand-finger-right hand-grab hand-little-finger hand-love-you hand-middle-finger hand-move hand-off hand-ring-finger hand-sanitizer hand-stop hand-three-fingers hand-two-fingers hanger hanger-2 hanger-off hash hashtag haze haze-moon hdr heading heading-off headphones headphones-off headset headset-off health-recognition heart heart-bitcoin heart-bolt heart-broken heart-cancel heart-check heart-code heart-cog heart-discount heart-dollar heart-down heart-exclamation heart-handshake heart-minus heart-off heart-pause heart-pin heart-plus heart-question heart-rate-monitor heart-search heart-share heart-spark heart-star heart-up heart-x heartbeat hearts hearts-off helicopter helicopter-landing helmet helmet-off help help-circle help-hexagon help-octagon help-off help-small help-square help-square-rounded help-triangle hemisphere hemisphere-off hemisphere-plus hexagon hexagon-3d hexagon-asterisk hexagon-letter-a hexagon-letter-b hexagon-letter-c hexagon-letter-d hexagon-letter-e hexagon-letter-f hexagon-letter-g hexagon-letter-h hexagon-letter-i hexagon-letter-j hexagon-letter-k hexagon-letter-l hexagon-letter-m hexagon-letter-n hexagon-letter-o hexagon-letter-p hexagon-letter-q hexagon-letter-r hexagon-letter-s hexagon-letter-t hexagon-letter-u hexagon-letter-v hexagon-letter-w hexagon-letter-x hexagon-letter-y hexagon-letter-z hexagon-minus hexagon-minus-2 hexagon-number-0 hexagon-number-1 hexagon-number-2 hexagon-number-3 hexagon-number-4 hexagon-number-5 hexagon-number-6 hexagon-number-7 hexagon-number-8 hexagon-number-9 hexagon-off hexagon-plus hexagon-plus-2 hexagonal-prism hexagonal-prism-off hexagonal-prism-plus hexagonal-pyramid hexagonal-pyramid-off hexagonal-pyramid-plus hexagons hexagons-off hierarchy hierarchy-2 hierarchy-3 hierarchy-off highlight highlight-off history history-off history-toggle home home-2 home-bitcoin home-bolt home-cancel home-check home-cog home-dollar home-dot home-down home-eco home-edit home-exclamation home-hand home-heart home-infinity home-link home-lock home-minus home-move home-off home-plus home-question home-ribbon home-search home-share home-shield home-signal home-spark home-star home-stats home-up home-x horse horse-toy horseshoe hospital hospital-circle hotel-service hourglass hourglass-empty hourglass-high hourglass-low hourglass-off hours-12 hours-24 html http-connect http-connect-off http-delete http-delete-off http-get http-get-off http-head http-head-off http-options http-options-off http-patch http-patch-off http-post http-post-off http-put http-put-off http-que http-que-off http-trace http-trace-off hula-hoop ice-cream ice-cream-2 ice-cream-off ice-skating iceberg icons icons-off id id-badge id-badge-2 id-badge-off id-off identification ikosaedr image-generation image-in-picture inbox inbox-off indent-decrease indent-increase infinity infinity-2 infinity-off info-circle info-hexagon info-octagon info-small info-square info-square-rounded info-triangle information-circle inner-shadow-bottom inner-shadow-bottom-left inner-shadow-bottom-right inner-shadow-left inner-shadow-right inner-shadow-top inner-shadow-top-left inner-shadow-top-right input-ai input-check input-search input-spark input-x invoice ironing ironing-1 ironing-2 ironing-3 ironing-off ironing-steam ironing-steam-off irregular-polyhedron irregular-polyhedron-off irregular-polyhedron-plus italic jacket jetpack jetski jewish-star join-bevel join-round join-straight joker jpg json jump-rope karate kayak kerning key key-off keyboard keyboard-hide keyboard-off keyboard-show keyframe keyframe-align-center keyframe-align-horizontal keyframe-align-vertical keyframes label label-important label-off ladder ladder-off ladle lambda lamp lamp-2 lamp-off lane language language-hiragana language-katakana language-off lasso lasso-off lasso-polygon laurel-wreath laurel-wreath-1 laurel-wreath-2 laurel-wreath-3 lawn-mower layers-difference layers-intersect layers-intersect-2 layers-linked layers-off layers-selected layers-selected-bottom layers-subtract layers-union layout layout-2 layout-align-bottom layout-align-center layout-align-left layout-align-middle layout-align-right layout-align-top layout-board layout-board-split layout-bottombar layout-bottombar-collapse layout-bottombar-expand layout-bottombar-inactive layout-cards layout-collage layout-columns layout-dashboard layout-distribute-horizontal layout-distribute-vertical layout-grid layout-grid-add layout-grid-remove layout-kanban layout-list layout-navbar layout-navbar-collapse layout-navbar-expand layout-navbar-inactive layout-off layout-rows layout-sidebar layout-sidebar-inactive layout-sidebar-left-collapse layout-sidebar-left-expand layout-sidebar-right layout-sidebar-right-collapse layout-sidebar-right-expand layout-sidebar-right-inactive leaf leaf-2 leaf-maple leaf-off lego lego-off lemon lemon-2 letter-a letter-a-small letter-b letter-b-small letter-c letter-c-small letter-case letter-case-lower letter-case-toggle letter-case-upper letter-d letter-d-small letter-e letter-e-small letter-f letter-f-small letter-g letter-g-small letter-h letter-h-small letter-i letter-i-small letter-j letter-j-small letter-k letter-k-small letter-l letter-l-small letter-m letter-m-small letter-n letter-n-small letter-o letter-o-small letter-p letter-p-small letter-q letter-q-small letter-r letter-r-small letter-s letter-s-small letter-spacing letter-t letter-t-small letter-u letter-u-small letter-v letter-v-small letter-w letter-w-small letter-x letter-x-small letter-y letter-y-small letter-z letter-z-small library library-minus library-photo library-plus license license-off lifebuoy lifebuoy-off light-bulb lighter line line-dashed line-dotted line-height line-scan link link-minus link-off link-plus list list-check list-details list-letters list-numbers list-search list-tree live-photo live-photo-off live-view load-balancer loader loader-2 loader-3 loader-4 loader-quarter location location-bolt location-broken location-cancel location-check location-code location-cog location-discount location-dollar location-down location-exclamation location-heart location-minus location-off location-pause location-pin location-plus location-question location-search location-share location-star location-up location-x lock lock-access lock-access-off lock-bitcoin lock-bolt lock-cancel lock-check lock-closed lock-code lock-cog lock-dollar lock-down lock-exclamation lock-heart lock-minus lock-off lock-open lock-open-2 lock-open-off lock-password lock-pause lock-pin lock-plus lock-question lock-search lock-share lock-square lock-square-rounded lock-star lock-up lock-x locked logic-and logic-buffer logic-nand logic-nor logic-not logic-or logic-xnor logic-xor login login-2 logout logout-2 logs lollipop lollipop-off luggage luggage-off lungs lungs-off macro macro-off magnet magnet-off magnetic magnifying-glass mail mail-ai mail-bitcoin mail-bolt mail-cancel mail-check mail-code mail-cog mail-dollar mail-down mail-exclamation mail-fast mail-forward mail-heart mail-minus mail-off mail-opened mail-pause mail-pin mail-plus mail-question mail-search mail-share mail-spark mail-star mail-up mail-x mailbox mailbox-off man manual-gearbox map map-2 map-bolt map-cancel map-check map-code map-cog map-discount map-dollar map-down map-east map-exclamation map-heart map-lock map-minus map-north map-off map-pause map-pin map-pin-2 map-pin-bolt map-pin-cancel map-pin-check map-pin-code map-pin-cog map-pin-dollar map-pin-down map-pin-exclamation map-pin-heart map-pin-minus map-pin-off map-pin-pause map-pin-pin map-pin-plus map-pin-question map-pin-search map-pin-share map-pin-star map-pin-up map-pin-x map-pins map-plus map-question map-route map-search map-share map-shield map-south map-star map-up map-west map-x markdown markdown-off marquee marquee-2 marquee-off mars mask mask-off masks-theater masks-theater-off massage matchstick math math-1-divide-2 math-1-divide-3 math-avg math-cos math-ctg math-equal-greater math-equal-lower math-function math-function-off math-function-y math-greater math-integral math-integral-x math-integrals math-lower math-max math-max-min math-min math-not math-off math-pi math-pi-divide-2 math-sec math-sin math-symbols math-tg math-x-divide-2 math-x-divide-y math-x-divide-y-2 math-x-floor-divide-y math-x-minus-x math-x-minus-y math-x-plus-x math-x-plus-y math-xy math-y-minus-y math-y-plus-y matrix maximize maximize-off meat meat-off medal medal-2 medical-cross medical-cross-circle medical-cross-off medicine-syrup meeple melon menorah menu menu-2 menu-3 menu-4 menu-deep menu-order mesh message message-2 message-2-bolt message-2-cancel message-2-check message-2-code message-2-cog message-2-dollar message-2-down message-2-exclamation message-2-heart message-2-minus message-2-off message-2-pause message-2-pin message-2-plus message-2-question message-2-search message-2-share message-2-star message-2-up message-2-x message-bolt message-cancel message-chatbot message-check message-circle message-circle-bolt message-circle-cancel message-circle-check message-circle-code message-circle-cog message-circle-dollar message-circle-down message-circle-exclamation message-circle-heart message-circle-minus message-circle-off message-circle-pause message-circle-pin message-circle-plus message-circle-question message-circle-search message-circle-share message-circle-star message-circle-up message-circle-user message-circle-x message-code message-cog message-dollar message-dots message-down message-exclamation message-forward message-heart message-language message-minus message-off message-pause message-pin message-plus message-question message-reply message-report message-search message-share message-star message-up message-user message-x messages messages-off meteor meteor-off meter-cube meter-square metronome michelin-bib-gourmand michelin-star michelin-star-green mickey microfrontends microphone microphone-2 microphone-2-off microphone-off microscope microscope-off microwave microwave-off middleware military-award military-rank milk milk-off milkshake minimize minus minus-circle minus-vertical mist mist-off mobiledata mobiledata-off moneybag moneybag-edit moneybag-heart moneybag-minus moneybag-move moneybag-move-back moneybag-plus monkeybar mood-angry mood-annoyed mood-annoyed-2 mood-bitcoin mood-boy mood-check mood-cog mood-confuzed mood-crazy-happy mood-cry mood-dollar mood-edit mood-empty mood-happy mood-heart mood-kid mood-look-down mood-look-left mood-look-right mood-look-up mood-minus mood-nerd mood-nervous mood-neutral mood-off mood-pin mood-plus mood-puzzled mood-sad mood-sad-2 mood-sad-dizzy mood-sad-squint mood-search mood-share mood-sick mood-silence mood-sing mood-smile mood-smile-beam mood-smile-dizzy mood-spark mood-surprised mood-tongue mood-tongue-wink mood-tongue-wink-2 mood-unamused mood-up mood-wink mood-wink-2 mood-wrrr mood-x mood-xd moon moon-2 moon-off moon-stars moped mosque motorbike mountain mountain-off mouse mouse-2 mouse-off moustache movie movie-off mug mug-off multiplier-0-5x multiplier-1-5x multiplier-1x multiplier-2x mushroom mushroom-off music music-bolt music-cancel music-check music-code music-cog music-discount music-dollar music-down music-exclamation music-heart music-minus music-off music-pause music-pin music-plus music-question music-search music-share music-star music-up music-x navigation navigation-bolt navigation-cancel navigation-check navigation-code navigation-cog navigation-discount navigation-dollar navigation-down navigation-east navigation-exclamation navigation-heart navigation-minus navigation-north navigation-off navigation-pause navigation-pin navigation-plus navigation-question navigation-search navigation-share navigation-south navigation-star navigation-top navigation-up navigation-west navigation-x needle needle-thread network network-off new-section news news-off nfc nfc-off no-copyright no-creative-commons no-derivatives noise-reduction north-star notdef note note-off notebook notebook-off notes notes-off notification notification-off notifications_active number number-0 number-0-small number-1 number-1-small number-10 number-10-small number-100-small number-11 number-11-small number-12-small number-123 number-13-small number-14-small number-15-small number-16-small number-17-small number-18-small number-19-small number-2 number-2-small number-20-small number-21-small number-22-small number-23-small number-24-small number-25-small number-26-small number-27-small number-28-small number-29-small number-3 number-3-small number-30-small number-31-small number-32-small number-33-small number-34-small number-35-small number-36-small number-37-small number-38-small number-39-small number-4 number-4-small number-40-small number-41-small number-42-small number-43-small number-44-small number-45-small number-46-small number-47-small number-48-small number-49-small number-5 number-5-small number-50-small number-51-small number-52-small number-53-small number-54-small number-55-small number-56-small number-57-small number-58-small number-59-small number-6 number-6-small number-60-small number-61-small number-62-small number-63-small number-64-small number-65-small number-66-small number-67-small number-68-small number-69-small number-7 number-7-small number-70-small number-71-small number-72-small number-73-small number-74-small number-75-small number-76-small number-77-small number-78-small number-79-small number-8 number-8-small number-80-small number-81-small number-82-small number-83-small number-84-small number-85-small number-86-small number-87-small number-88-small number-89-small number-9 number-9-small number-90-small number-91-small number-92-small number-93-small number-94-small number-95-small number-96-small number-97-small number-98-small number-99-small numbers nurse nut object-scan octagon octagon-minus octagon-minus-2 octagon-off octagon-plus octagon-plus-2 octahedron octahedron-off octahedron-plus old olympic-torch olympics olympics-off om omega option outbound outlet oval oval-vertical overline package package-export package-import package-off packages pacman page-break paint paint-off palette palette-off panorama-horizontal panorama-horizontal-off panorama-vertical panorama-vertical-off paper-bag paper-bag-off paperclip parachute parachute-off parentheses parentheses-off parking parking-circle parking-meter parking-off password password-fingerprint password-mobile-phone password-user paw paw-off paywall pdf peace pencil pencil-bolt pencil-cancel pencil-check pencil-code pencil-cog pencil-discount pencil-dollar pencil-down pencil-exclamation pencil-heart pencil-minus pencil-off pencil-pause pencil-pin pencil-plus pencil-question pencil-search pencil-share pencil-star pencil-up pencil-x pendulum pennant pennant-2 pennant-off pentagon pentagon-minus pentagon-number-0 pentagon-number-1 pentagon-number-2 pentagon-number-3 pentagon-number-4 pentagon-number-5 pentagon-number-6 pentagon-number-7 pentagon-number-8 pentagon-number-9 pentagon-off pentagon-plus pentagon-x pentagram pepper pepper-off percent percent-badge percentage percentage-0 percentage-10 percentage-100 percentage-20 percentage-25 percentage-30 percentage-33 percentage-40 percentage-50 percentage-60 percentage-66 percentage-70 percentage-75 percentage-80 percentage-90 perfume perspective perspective-off phone phone-call phone-calling phone-check phone-done phone-end phone-incoming phone-off phone-outgoing phone-pause phone-plus phone-ringing phone-spark phone-x photo photo-ai photo-alt photo-bitcoin photo-bolt photo-cancel photo-check photo-circle photo-circle-minus photo-circle-plus photo-code photo-cog photo-dollar photo-down photo-edit photo-exclamation photo-heart photo-hexagon photo-minus photo-off photo-pause photo-pentagon photo-pin photo-plus photo-question photo-scan photo-search photo-sensor photo-sensor-2 photo-sensor-3 photo-share photo-shield photo-spark photo-square-rounded photo-star photo-up photo-video photo-x physotherapist piano pick picnic-table picture-in-picture picture-in-picture-off picture-in-picture-on picture-in-picture-top pig pig-money pig-off pilcrow pilcrow-left pilcrow-right pill pill-off pillow pills pin pin-end pin-invoke ping-pong pinned pinned-off pipeline pizza pizza-off placeholder plane plane-arrival plane-departure plane-inflight plane-off plane-tilt planet planet-off plant plant-2 plant-2-off plant-off play play-basketball play-card play-card-1 play-card-10 play-card-2 play-card-3 play-card-4 play-card-5 play-card-6 play-card-7 play-card-8 play-card-9 play-card-a play-card-j play-card-k play-card-off play-card-q play-card-star play-circle play-football play-handball play-volleyball player-eject player-pause player-play player-record player-skip-back player-skip-forward player-stop player-track-next player-track-prev playlist playlist-add playlist-off playlist-x playstation-circle playstation-square playstation-triangle playstation-x plug plug-connected plug-connected-x plug-off plug-x plunger plus plus-circle plus-equal plus-minus png podium podium-off point point-off pointer pointer-2 pointer-bolt pointer-cancel pointer-check pointer-code pointer-cog pointer-collaboration pointer-collaboration-2 pointer-dollar pointer-down pointer-exclamation pointer-heart pointer-minus pointer-off pointer-pause pointer-pin pointer-plus pointer-question pointer-search pointer-share pointer-star pointer-up pointer-x pokeball pokeball-off poker-chip polaroid polygon polygon-off poo pool pool-off power pray premium-rights prescription presentation presentation-analytics presentation-chart-line presentation-off printer printer-off prism prism-light prism-off prism-plus prison progress progress-alert progress-bolt progress-check progress-down progress-help progress-x prompt prong propeller propeller-off protocol pumpkin-scary puzzle puzzle-2 puzzle-off pyramid pyramid-off pyramid-plus qrcode qrcode-off question-mark queue-pop-in queue-pop-out quote quote-off quote-open quotes radar radar-2 radar-off radio radio-off radioactive radioactive-off radius-bottom-left radius-bottom-right radius-top-left radius-top-right rainbow rainbow-off rating-12-plus rating-14-plus rating-16-plus rating-18-plus rating-21-plus razor razor-electric receipt receipt-2 receipt-bitcoin receipt-dollar receipt-euro receipt-off receipt-pound receipt-refund receipt-rupee receipt-tax receipt-yen receipt-yuan recharging record-mail record-mail-off rectangle rectangle-rounded-bottom rectangle-rounded-top rectangle-vertical rectangular-prism rectangular-prism-off rectangular-prism-plus recycle recycle-off refresh refresh-alert refresh-dot refresh-off regex regex-off registered relation-many-to-many relation-one-to-many relation-one-to-one reload reorder repeat repeat-off repeat-once replace replace-off replace-user report report-analytics report-medical report-money report-off report-search reserved-line resize restore rewind-backward-10 rewind-backward-15 rewind-backward-20 rewind-backward-30 rewind-backward-40 rewind-backward-5 rewind-backward-50 rewind-backward-60 rewind-forward-10 rewind-forward-15 rewind-forward-20 rewind-forward-30 rewind-forward-40 rewind-forward-5 rewind-forward-50 rewind-forward-60 ribbon-health rings ripple ripple-down ripple-off ripple-up road road-off road-sign robot robot-face robot-off rocket rocket-off roller-skating rollercoaster rollercoaster-off rosette rosette-asterisk rosette-discount rosette-discount-check rosette-discount-check-off rosette-discount-off rosette-number-0 rosette-number-1 rosette-number-2 rosette-number-3 rosette-number-4 rosette-number-5 rosette-number-6 rosette-number-7 rosette-number-8 rosette-number-9 rotate rotate-2 rotate-360 rotate-3d rotate-clockwise rotate-clockwise-2 rotate-dot rotate-rectangle roulette route route-2 route-alt-left route-alt-right route-off route-scan route-square route-square-2 route-x route-x-2 router router-off row-insert-bottom row-insert-top row-remove rss rubber-stamp rubber-stamp-off rugby ruler ruler-2 ruler-2-off ruler-3 ruler-measure ruler-measure-2 ruler-off run rv-truck s-turn-down s-turn-left s-turn-right s-turn-up sailboat sailboat-2 sailboat-off salad salt sandbox satellite satellite-off sausage scale scale-off scale-outline scale-outline-off scan scan-cube scan-eye scan-letter-a scan-letter-t scan-position scan-traces schema schema-off school school-bell school-off scissors scissors-off scooter scooter-electric scoreboard screen-share screen-share-off screenshot scribble scribble-off script script-minus script-plus script-x scuba-diving scuba-diving-tank scuba-mask scuba-mask-off sdk search search-off section section-sign seedling seedling-off segway select select-all selector send send-2 send-off seo separator separator-horizontal separator-vertical server server-2 server-bolt server-cog server-off server-spark serverless servicemark settings settings-2 settings-ai settings-automation settings-bolt settings-cancel settings-check settings-code settings-cog settings-dollar settings-down settings-exclamation settings-heart settings-minus settings-off settings-pause settings-pin settings-plus settings-question settings-search settings-share settings-spark settings-star settings-up settings-x shadow shadow-off shape shape-2 shape-3 shape-off share share-2 share-3 share-off shareplay shield shield-bolt shield-cancel shield-check shield-checkered shield-chevron shield-code shield-cog shield-dollar shield-down shield-exclamation shield-half shield-heart shield-lock shield-minus shield-off shield-pause shield-pin shield-plus shield-question shield-search shield-share shield-star shield-up shield-x ship ship-off shirt shirt-off shirt-sport shoe shoe-off shopping-bag shopping-bag-check shopping-bag-discount shopping-bag-edit shopping-bag-exclamation shopping-bag-heart shopping-bag-minus shopping-bag-plus shopping-bag-search shopping-bag-x shopping-cart shopping-cart-bolt shopping-cart-cancel shopping-cart-check shopping-cart-code shopping-cart-cog shopping-cart-copy shopping-cart-discount shopping-cart-dollar shopping-cart-down shopping-cart-exclamation shopping-cart-heart shopping-cart-minus shopping-cart-off shopping-cart-pause shopping-cart-pin shopping-cart-plus shopping-cart-question shopping-cart-search shopping-cart-share shopping-cart-star shopping-cart-up shopping-cart-x shovel shovel-pitchforks shredder sign-left sign-right signal-2g signal-3g signal-4g signal-4g-plus signal-5g signal-6g signal-e signal-g signal-h signal-h-plus signal-lte signature signature-off sitemap sitemap-off skateboard skateboard-off skateboarding sketching skew-x skew-y ski-jumping skull slash slashes sleigh slice slideshow smart-home smart-home-off smoking smoking-no snowboarding snowflake snowflake-off snowman soccer-field social social-off sock sofa sofa-off solar-electricity solar-panel solar-panel-2 sort-0-9 sort-9-0 sort-a-z sort-ascending sort-ascending-2 sort-ascending-letters sort-ascending-numbers sort-ascending-shapes sort-ascending-small-big sort-descending sort-descending-2 sort-descending-letters sort-descending-numbers sort-descending-shapes sort-descending-small-big sort-z-a sos soup soup-off source-code space space-off spaces spacing-horizontal spacing-vertical spade sparkle sparkle-2 sparkle-highlight sparkles sparkles-2 speakerphone speedboat sphere sphere-2 sphere-off sphere-plus spider spiral spiral-off sport-billard spray spy spy-off sql square square-arrow-down square-arrow-left square-arrow-right square-arrow-up square-asterisk square-check square-chevron-down square-chevron-left square-chevron-right square-chevron-up square-chevrons-down square-chevrons-left square-chevrons-right square-chevrons-up square-dashed square-dot square-f0 square-f1 square-f2 square-f3 square-f4 square-f5 square-f6 square-f7 square-f8 square-f9 square-forbid square-forbid-2 square-half square-key square-letter-a square-letter-b square-letter-c square-letter-d square-letter-e square-letter-f square-letter-g square-letter-h square-letter-i square-letter-j square-letter-k square-letter-l square-letter-m square-letter-n square-letter-o square-letter-p square-letter-q square-letter-r square-letter-s square-letter-t square-letter-u square-letter-v square-letter-w square-letter-x square-letter-y square-letter-z square-minus square-minus-2 square-number-0 square-number-1 square-number-2 square-number-3 square-number-4 square-number-5 square-number-6 square-number-7 square-number-8 square-number-9 square-off square-percentage square-plus square-plus-2 square-root square-root-2 square-rotated square-rotated-asterisk square-rotated-forbid square-rotated-forbid-2 square-rotated-off square-rounded square-rounded-arrow-down square-rounded-arrow-left square-rounded-arrow-right square-rounded-arrow-up square-rounded-check square-rounded-chevron-down square-rounded-chevron-left square-rounded-chevron-right square-rounded-chevron-up square-rounded-chevrons-down square-rounded-chevrons-left square-rounded-chevrons-right square-rounded-chevrons-up square-rounded-letter-a square-rounded-letter-b square-rounded-letter-c square-rounded-letter-d square-rounded-letter-e square-rounded-letter-f square-rounded-letter-g square-rounded-letter-h square-rounded-letter-i square-rounded-letter-j square-rounded-letter-k square-rounded-letter-l square-rounded-letter-m square-rounded-letter-n square-rounded-letter-o square-rounded-letter-p square-rounded-letter-q square-rounded-letter-r square-rounded-letter-s square-rounded-letter-t square-rounded-letter-u square-rounded-letter-v square-rounded-letter-w square-rounded-letter-x square-rounded-letter-y square-rounded-letter-z square-rounded-minus square-rounded-minus-2 square-rounded-number-0 square-rounded-number-1 square-rounded-number-2 square-rounded-number-3 square-rounded-number-4 square-rounded-number-5 square-rounded-number-6 square-rounded-number-7 square-rounded-number-8 square-rounded-number-9 square-rounded-percentage square-rounded-plus square-rounded-plus-2 square-rounded-x square-toggle square-toggle-horizontal square-x squares squares-diagonal squares-selected stack stack-2 stack-3 stack-back stack-backward stack-forward stack-front stack-middle stack-pop stack-push stairs stairs-down stairs-up star star-half star-off stars stars-off status-change steam steering-wheel steering-wheel-off step-into step-out stereo-glasses stethoscope stethoscope-off sticker sticker-2 stopwatch storm storm-off stretching stretching-2 strikethrough stroke-curved stroke-dynamic stroke-straight submarine subscript subtask subtitles subtitles-ai subtitles-edit subtitles-off sum sum-off sun sun-electricity sun-high sun-low sun-moon sun-off sun-wind sunglasses sunrise sunset sunset-2 superscript svg swimming swipe swipe-down swipe-left swipe-right swipe-up switch switch-2 switch-3 switch-horizontal switch-vertical sword sword-off swords table table-alias table-column table-dashed table-down table-export table-heart table-import table-minus table-off table-options table-plus table-row table-share table-shortcut table-spark tag tag-minus tag-off tag-plus tag-starred tags tags-off taiwan-dollar tallymark-1 tallymark-2 tallymark-3 tallymark-4 tallymarks tank target target-2 target-arrow target-off tax tax-euro tax-pound teapot telescope telescope-off temperature temperature-celsius temperature-fahrenheit temperature-minus temperature-off temperature-plus temperature-snow temperature-sun template template-off tent tent-off terminal terminal-2 test-pipe test-pipe-2 test-pipe-off tex text-caption text-color text-decrease text-direction-ltr text-direction-rtl text-grammar text-increase text-orientation text-plus text-recognition text-resize text-scan-2 text-scan-ai text-size text-spellcheck text-wrap text-wrap-column text-wrap-disabled texture theater thermometer thumb-down thumb-down-off thumb-up thumb-up-off tic-tac ticket ticket-off tie tilde tilt-shift tilt-shift-off time-duration-0 time-duration-10 time-duration-15 time-duration-30 time-duration-45 time-duration-5 time-duration-60 time-duration-90 time-duration-off timeline timeline-event timeline-event-exclamation timeline-event-minus timeline-event-plus timeline-event-text timeline-event-x timezone tip-jar tip-jar-euro tip-jar-pound tir today toggle-left toggle-right toilet-paper toilet-paper-off toml tool tools tools-kitchen tools-kitchen-2 tools-kitchen-2-off tools-kitchen-3 tools-kitchen-off tools-off tooltip topology-bus topology-complex topology-full topology-full-hierarchy topology-ring topology-ring-2 topology-ring-3 topology-star topology-star-2 topology-star-3 topology-star-ring topology-star-ring-2 topology-star-ring-3 torii tornado tournament tower tower-off track tractor trademark traffic-cone traffic-cone-off traffic-lights traffic-lights-off train transaction-bitcoin transaction-dollar transaction-euro transaction-pound transaction-rupee transaction-yen transaction-yuan transfer transfer-in transfer-out transfer-vertical transform transform-point transform-point-bottom-left transform-point-bottom-right transform-point-top-left transform-point-top-right transition-bottom transition-left transition-right transition-top trash trash-off trash-x treadmill tree trees trekking trending-down trending-down-2 trending-down-3 trending-up trending-up-2 trending-up-3 trending-up-down triangle triangle-inverted triangle-minus triangle-minus-2 triangle-off triangle-plus triangle-plus-2 triangle-square-circle triangles trident trolley trophy trophy-off trowel truck truck-delivery truck-loading truck-off truck-return txt typeface typography typography-off u-turn-left u-turn-right ufo ufo-off uhd umbrella umbrella-2 umbrella-closed umbrella-closed-2 umbrella-off underline unicycle universe unlink upload urgent usb user user-bitcoin user-bolt user-cancel user-check user-circle user-code user-cog user-dollar user-down user-edit user-exclamation user-group user-heart user-hexagon user-key user-minus user-off user-pause user-pentagon user-pin user-plus user-question user-scan user-screen user-search user-share user-shield user-square user-square-rounded user-star user-up user-x users users-group users-minus users-plus uv-index ux-circle vaccine vaccine-bottle vaccine-bottle-off vaccine-off vacuum-cleaner variable variable-minus variable-off variable-plus vector vector-bezier vector-bezier-2 vector-bezier-arc vector-bezier-circle vector-off vector-spline vector-triangle vector-triangle-off venus versions versions-off video video-minus video-off video-plus view-360 view-360-arrow view-360-number view-360-off viewfinder viewfinder-off viewport-narrow viewport-short viewport-tall viewport-wide vignette vinyl vip vip-2 vip-off virus virus-off virus-search vocabulary vocabulary-off volcano volume volume-2 volume-3 volume-4 volume-off vs walk wall wall-off wallet wallet-off wallpaper wallpaper-off wand wand-off wash wash-dry wash-dry-1 wash-dry-2 wash-dry-3 wash-dry-a wash-dry-dip wash-dry-f wash-dry-flat wash-dry-hang wash-dry-off wash-dry-p wash-dry-shade wash-dry-w wash-dryclean wash-dryclean-off wash-eco wash-gentle wash-hand wash-machine wash-off wash-press wash-temperature-1 wash-temperature-2 wash-temperature-3 wash-temperature-4 wash-temperature-5 wash-temperature-6 wash-tumble-dry wash-tumble-off waterpolo wave-saw-tool wave-sine wave-square waves-electricity webhook webhook-off weight wheat wheat-off wheel wheelchair wheelchair-off whirl whisk wifi wifi-0 wifi-1 wifi-2 wifi-off wind wind-electricity wind-off windmill windmill-off window window-maximize window-minimize window-off windsock wiper wiper-wash woman wood world world-bolt world-cancel world-check world-code world-cog world-dollar world-down world-download world-exclamation world-heart world-latitude world-longitude world-map world-minus world-off world-pause world-pin world-plus world-question world-search world-share world-star world-up world-upload world-www world-x wrecking-ball writing writing-off writing-sign writing-sign-off x x-circle x-mark x-power-y xbox-a xbox-b xbox-x xbox-y xd xxx yin-yang yoga zeppelin zeppelin-off zero-config zip zodiac-aquarius zodiac-aries zodiac-cancer zodiac-capricorn zodiac-gemini zodiac-leo zodiac-libra zodiac-pisces zodiac-sagittarius zodiac-scorpio zodiac-taurus zodiac-virgo zoom zoom-cancel zoom-check zoom-code zoom-exclamation zoom-in zoom-in-area zoom-money zoom-out zoom-out-area zoom-pan zoom-question zoom-replace zoom-reset zoom-scan zzz zzz-off'.split(' '));
520
+ const ICON_NAMES = Object.freeze('a-b a-b-2 a-b-off abacus abacus-off abc access-point access-point-off accessible accessible-off account_balance acorn acrobatic activity activity-heartbeat ad ad-2 ad-circle ad-circle-off ad-off address-book address-book-off adjustments adjustments-alt adjustments-bolt adjustments-cancel adjustments-check adjustments-code adjustments-cog adjustments-dollar adjustments-down adjustments-exclamation adjustments-heart adjustments-horizontal adjustments-minus adjustments-off adjustments-pause adjustments-pin adjustments-plus adjustments-question adjustments-search adjustments-share adjustments-spark adjustments-star adjustments-up adjustments-x aerial-lift affiliate ai ai-agent ai-agents ai-gateway air-balloon air-conditioning air-conditioning-disabled air-traffic-control alarm alarm-average alarm-minus alarm-off alarm-plus alarm-smoke alarm-snooze album album-off alert-circle alert-circle-off alert-hexagon alert-hexagon-off alert-octagon alert-small alert-small-off alert-square alert-square-rounded alert-square-rounded-off alert-triangle alert-triangle-off alien align-box-bottom-center align-box-bottom-left align-box-bottom-right align-box-center-bottom align-box-center-middle align-box-center-stretch align-box-center-top align-box-left-bottom align-box-left-middle align-box-left-stretch align-box-left-top align-box-right-bottom align-box-right-middle align-box-right-stretch align-box-right-top align-box-top-center align-box-top-left align-box-top-right align-center align-justified align-left align-left-2 align-right align-right-2 alpha alphabet-arabic alphabet-bangla alphabet-cyrillic alphabet-greek alphabet-hebrew alphabet-korean alphabet-latin alphabet-polish alphabet-runes alphabet-thai alt ambulance ampersand analytics analyze analyze-off anchor anchor-off angle ankh antenna antenna-bars-1 antenna-bars-2 antenna-bars-3 antenna-bars-4 antenna-bars-5 antenna-bars-off antenna-off aperture aperture-off api api-app api-app-off api-book api-off app-window apple apps apps-off archery-arrow archive archive-box archive-off armchair armchair-2 armchair-2-off armchair-off arrow-autofit-content arrow-autofit-down arrow-autofit-height arrow-autofit-left arrow-autofit-right arrow-autofit-up arrow-autofit-width arrow-back arrow-back-up arrow-back-up-double arrow-badge-down arrow-badge-left arrow-badge-right arrow-badge-up arrow-bar-both arrow-bar-down arrow-bar-left arrow-bar-right arrow-bar-to-down arrow-bar-to-down-dashed arrow-bar-to-left arrow-bar-to-left-dashed arrow-bar-to-right arrow-bar-to-right-dashed arrow-bar-to-up arrow-bar-to-up-dashed arrow-bar-up arrow-bear-left arrow-bear-left-2 arrow-bear-right arrow-bear-right-2 arrow-big-down arrow-big-down-line arrow-big-down-lines arrow-big-left arrow-big-left-line arrow-big-left-lines arrow-big-right arrow-big-right-line arrow-big-right-lines arrow-big-up arrow-big-up-line arrow-big-up-lines arrow-bounce arrow-capsule arrow-curve-left arrow-curve-right arrow-down arrow-down-bar arrow-down-circle arrow-down-dashed arrow-down-from-arc arrow-down-left arrow-down-left-circle arrow-down-rhombus arrow-down-right arrow-down-right-circle arrow-down-square arrow-down-tail arrow-down-to-arc arrow-down-tray arrow-elbow-left arrow-elbow-right arrow-fork arrow-forward arrow-forward-up arrow-forward-up-double arrow-guide arrow-iteration arrow-left arrow-left-bar arrow-left-circle arrow-left-dashed arrow-left-from-arc arrow-left-rhombus arrow-left-right arrow-left-square arrow-left-tail arrow-left-to-arc arrow-loop-left arrow-loop-left-2 arrow-loop-right arrow-loop-right-2 arrow-merge arrow-merge-alt-left arrow-merge-alt-right arrow-merge-both arrow-merge-left arrow-merge-right arrow-move-down arrow-move-left arrow-move-right arrow-move-up arrow-narrow-down arrow-narrow-down-dashed arrow-narrow-left arrow-narrow-left-dashed arrow-narrow-right arrow-narrow-right-dashed arrow-narrow-up arrow-narrow-up-dashed arrow-path arrow-ramp-left arrow-ramp-left-2 arrow-ramp-left-3 arrow-ramp-right arrow-ramp-right-2 arrow-ramp-right-3 arrow-right arrow-right-bar arrow-right-circle arrow-right-dashed arrow-right-from-arc arrow-right-on-rectangle arrow-right-rhombus arrow-right-square arrow-right-start-on-rectangle arrow-right-tail arrow-right-to-arc arrow-rotary-first-left arrow-rotary-first-right arrow-rotary-last-left arrow-rotary-last-right arrow-rotary-left arrow-rotary-right arrow-rotary-straight arrow-roundabout-left arrow-roundabout-right arrow-sharp-turn-left arrow-sharp-turn-right arrow-top-right-on-square arrow-trending-down arrow-trending-up arrow-up arrow-up-bar arrow-up-circle arrow-up-dashed arrow-up-from-arc arrow-up-left arrow-up-left-circle arrow-up-rhombus arrow-up-right arrow-up-right-circle arrow-up-square arrow-up-tail arrow-up-to-arc arrow-up-tray arrow-wave-left-down arrow-wave-left-up arrow-wave-right-down arrow-wave-right-up arrow-zig-zag arrows-cross arrows-diagonal arrows-diagonal-2 arrows-diagonal-minimize arrows-diagonal-minimize-2 arrows-diff arrows-double-ne-sw arrows-double-nw-se arrows-double-se-nw arrows-double-sw-ne arrows-down arrows-down-up arrows-exchange arrows-exchange-2 arrows-horizontal arrows-join arrows-join-2 arrows-left arrows-left-down arrows-left-right arrows-maximize arrows-minimize arrows-move arrows-move-horizontal arrows-move-vertical arrows-pointing-in arrows-pointing-out arrows-random arrows-right arrows-right-down arrows-right-left arrows-shuffle arrows-shuffle-2 arrows-sort arrows-split arrows-split-2 arrows-transfer-down arrows-transfer-up arrows-transfer-up-down arrows-up arrows-up-down arrows-up-left arrows-up-right arrows-vertical artboard artboard-off article article-off aspect-ratio aspect-ratio-off assembly assembly-off asset asterisk asterisk-simple at at-off atom atom-2 atom-off augmented-reality augmented-reality-2 augmented-reality-off auth-2fa automatic-gearbox automation avocado award award-off axe axis-x axis-y baby-bottle baby-carriage background backhoe backpack backpack-off backslash backspace badge badge-2k badge-3d badge-3k badge-4k badge-5k badge-8k badge-ad badge-ad-off badge-ar badge-cc badge-hd badge-off badge-sd badge-tm badge-vo badge-vr badge-wc badges badges-off baguette ball-american-football ball-american-football-off ball-baseball ball-basketball ball-bowling ball-football ball-football-off ball-tennis ball-volleyball balloon balloon-off ballpen ballpen-off ban banana bandage bandage-off banknotes barbell barbell-off barcode barcode-off barrel barrel-off barrier-block barrier-block-off bars-3 bars-3-bottom-left bars-3-bottom-right baseline baseline-density-large baseline-density-medium baseline-density-small basket basket-bolt basket-cancel basket-check basket-code basket-cog basket-discount basket-dollar basket-down basket-exclamation basket-heart basket-minus basket-off basket-pause basket-pin basket-plus basket-question basket-search basket-share basket-star basket-up basket-x bat bath bath-off battery battery-1 battery-2 battery-3 battery-4 battery-automotive battery-charging battery-charging-2 battery-eco battery-exclamation battery-off battery-spark battery-vertical battery-vertical-1 battery-vertical-2 battery-vertical-3 battery-vertical-4 battery-vertical-charging battery-vertical-charging-2 battery-vertical-eco battery-vertical-exclamation battery-vertical-off beach beach-off bed bed-flat bed-off beer beer-off bell bell-alert bell-bolt bell-cancel bell-check bell-code bell-cog bell-dollar bell-down bell-exclamation bell-heart bell-minus bell-off bell-pause bell-pin bell-plus bell-question bell-ringing bell-ringing-2 bell-school bell-search bell-share bell-slash bell-star bell-up bell-x bell-z beta bible bike bike-off binary binary-off binary-tree binary-tree-2 binoculars biohazard biohazard-off blade bleach bleach-chlorine bleach-no-chlorine bleach-off blend-mode blender blind blob blockquote blocks bluetooth bluetooth-connected bluetooth-off bluetooth-x blur blur-off bmp body-scan bold bold-off bolt bolt-off bomb bone bone-off bong bong-off book book-2 book-download book-off book-upload bookmark bookmark-ai bookmark-edit bookmark-minus bookmark-off bookmark-plus bookmark-question bookmarks bookmarks-off books books-off boom border-all border-bottom border-bottom-plus border-corner-ios border-corner-pill border-corner-rounded border-corner-square border-corners border-horizontal border-inner border-left border-left-plus border-none border-outer border-radius border-right border-right-plus border-sides border-style border-style-2 border-top border-top-plus border-vertical bot-id bottle bottle-off bounce-left bounce-right bow bowl bowl-chopsticks bowl-spoon bowling box box-align-bottom box-align-bottom-left box-align-bottom-right box-align-left box-align-right box-align-top box-align-top-left box-align-top-right box-margin box-model box-model-2 box-model-2-off box-model-off box-multiple box-multiple-0 box-multiple-1 box-multiple-2 box-multiple-3 box-multiple-4 box-multiple-5 box-multiple-6 box-multiple-7 box-multiple-8 box-multiple-9 box-off box-padding braces braces-off brackets brackets-angle brackets-angle-off brackets-contain brackets-contain-end brackets-contain-start brackets-off braille brain brand-4chan brand-abstract brand-adobe brand-adobe-after-effect brand-adobe-illustrator brand-adobe-indesign brand-adobe-photoshop brand-adobe-premiere brand-adobe-xd brand-adonis-js brand-airbnb brand-airtable brand-algolia brand-alipay brand-alpine-js brand-amazon brand-amd brand-amie brand-amigo brand-among-us brand-android brand-angular brand-ansible brand-ao3 brand-appgallery brand-apple brand-apple-arcade brand-apple-news brand-apple-podcast brand-appstore brand-arc brand-asana brand-astro brand-audible brand-auth0 brand-aws brand-azure brand-backbone brand-badoo brand-baidu brand-bandcamp brand-bandlab brand-beats brand-bebo brand-behance brand-bilibili brand-binance brand-bing brand-bitbucket brand-blackberry brand-blender brand-blogger brand-bluesky brand-booking brand-bootstrap brand-bulma brand-bumble brand-bunpo brand-c-sharp brand-cake brand-cakephp brand-campaignmonitor brand-carbon brand-cashapp brand-chrome brand-cinema-4d brand-citymapper brand-cloudflare brand-codecov brand-codepen brand-codesandbox brand-cohost brand-coinbase brand-comedy-central brand-coreos brand-couchdb brand-couchsurfing brand-cpp brand-craft brand-crunchbase brand-css3 brand-ctemplar brand-cucumber brand-cupra brand-cypress brand-d3 brand-databricks brand-days-counter brand-dcos brand-debian brand-deezer brand-deliveroo brand-deno brand-denodo brand-deviantart brand-digg brand-dingtalk brand-discord brand-disney brand-disqus brand-django brand-docker brand-doctrine brand-dolby-digital brand-douban brand-dribbble brand-dropbox brand-drops brand-drupal brand-edge brand-elastic brand-electronic-arts brand-ember brand-envato brand-etsy brand-evernote brand-facebook brand-feedly brand-figma brand-filezilla brand-finder brand-firebase brand-firefox brand-fiverr brand-flickr brand-flightradar24 brand-flipboard brand-flutter brand-fortnite brand-foursquare brand-framer brand-framer-motion brand-funimation brand-gatsby brand-git brand-github brand-github-copilot brand-gitlab brand-gmail brand-golang brand-google brand-google-analytics brand-google-big-query brand-google-drive brand-google-fit brand-google-home brand-google-maps brand-google-one brand-google-photos brand-google-play brand-google-podcasts brand-grammarly brand-graphql brand-gravatar brand-grindr brand-guardian brand-gumroad brand-hackerrank brand-hbo brand-headlessui brand-hexo brand-hipchat brand-html5 brand-inertia brand-infakt brand-instagram brand-intercom brand-itch brand-javascript brand-jira brand-juejin brand-kako-talk brand-kbin brand-kick brand-kickstarter brand-kotlin brand-laravel brand-lastfm brand-leetcode brand-letterboxd brand-line brand-linkedin brand-linktree brand-linqpad brand-livewire brand-loom brand-mailgun brand-mantine brand-mastercard brand-mastodon brand-matrix brand-mcdonalds brand-medium brand-meetup brand-mercedes brand-messenger brand-meta brand-metabrainz brand-minecraft brand-miniprogram brand-mixpanel brand-monday brand-mongodb brand-my-oppo brand-mysql brand-national-geographic brand-nem brand-netbeans brand-netease-music brand-netflix brand-nexo brand-nextcloud brand-nextjs brand-nodejs brand-nord-vpn brand-notion brand-npm brand-nuxt brand-nytimes brand-oauth brand-office brand-ok-ru brand-onedrive brand-onlyfans brand-open-source brand-openai brand-openvpn brand-opera brand-pagekit brand-parsinta brand-patreon brand-paypal brand-paypay brand-peanut brand-pepsi brand-php brand-picsart brand-pinterest brand-planetscale brand-pnpm brand-pocket brand-polymer brand-powershell brand-printables brand-prisma brand-producthunt brand-pushbullet brand-pushover brand-python brand-qq brand-radix-ui brand-react brand-react-native brand-reason brand-reddit brand-redhat brand-redux brand-revolut brand-rumble brand-rust brand-safari brand-samsungpass brand-sass brand-sentry brand-sharik brand-shazam brand-shopee brand-sketch brand-skype brand-slack brand-snapchat brand-snapseed brand-snowflake brand-socket-io brand-solidjs brand-soundcloud brand-spacehey brand-speedtest brand-spotify brand-stackoverflow brand-stackshare brand-steam brand-stellar brand-stocktwits brand-storj brand-storybook brand-storytel brand-strava brand-stripe brand-sublime-text brand-sugarizer brand-supabase brand-superhuman brand-supernova brand-surfshark brand-svelte brand-swift brand-symfony brand-tabler brand-tabnine brand-tailwind brand-taobao brand-teams brand-ted brand-telegram brand-terraform brand-tesla brand-tether brand-thingiverse brand-threads brand-threejs brand-tidal brand-tiktok brand-tinder brand-topbuzz brand-torchain brand-toyota brand-trello brand-tripadvisor brand-tumblr brand-twilio brand-twitch brand-twitter brand-typescript brand-uber brand-ubuntu brand-unity brand-unsplash brand-upwork brand-valorant brand-vechain brand-vercel brand-vimeo brand-vinted brand-visa brand-visual-studio brand-vite brand-vivaldi brand-vk brand-vlc brand-volkswagen brand-vsco brand-vscode brand-vue brand-walmart brand-waze brand-webflow brand-wechat brand-weibo brand-whatsapp brand-wikipedia brand-windows brand-windy brand-wish brand-wix brand-wordpress brand-x brand-xamarin brand-xbox brand-xdeep brand-xing brand-yahoo brand-yandex brand-yarn brand-yatse brand-ycombinator brand-youtube brand-youtube-kids brand-zalando brand-zapier brand-zeit brand-zhihu brand-zoom brand-zulip brand-zwift bread bread-off briefcase briefcase-2 briefcase-off brightness brightness-2 brightness-auto brightness-down brightness-half brightness-off brightness-up broadcast broadcast-off browser browser-check browser-maximize browser-minus browser-off browser-plus browser-share browser-x brush brush-off bubble bubble-minus bubble-plus bubble-tea bubble-tea-2 bubble-text bubble-x bucket bucket-droplet bucket-off bug bug-off building building-airport building-arch building-bank building-bridge building-bridge-2 building-broadcast-tower building-burj-al-arab building-carousel building-castle building-church building-circus building-cog building-community building-cottage building-eiffel-tower building-estate building-factory building-factory-2 building-fortress building-hospital building-library building-lighthouse building-minus building-monument building-mosque building-off building-office building-pavilion building-plus building-skyscraper building-stadium building-store building-tunnel building-warehouse building-wind-turbine buildings bulb bulb-off bulldozer burger bus bus-off bus-stop businessplan butterfly cactus cactus-off cake cake-off cake-roll calculator calculator-off calendar calendar-bolt calendar-cancel calendar-check calendar-clock calendar-code calendar-cog calendar-dollar calendar-dot calendar-down calendar-due calendar-event calendar-exclamation calendar-heart calendar-minus calendar-month calendar-off calendar-pause calendar-pin calendar-plus calendar-question calendar-repeat calendar-sad calendar-search calendar-share calendar-smile calendar-star calendar-stats calendar-time calendar-up calendar-user calendar-week calendar-x camera camera-ai camera-bitcoin camera-bolt camera-cancel camera-check camera-code camera-cog camera-dollar camera-down camera-exclamation camera-heart camera-minus camera-moon camera-off camera-pause camera-pin camera-plus camera-question camera-rotate camera-search camera-selfie camera-share camera-spark camera-star camera-up camera-x camper campfire canary cancel candle candy candy-off cane cannabis cap-projecting cap-rounded cap-straight capsule capsule-horizontal capture capture-off car car-4wd car-crane car-crash car-door car-fan car-fan-1 car-fan-2 car-fan-3 car-fan-auto car-garage car-lifter car-off car-off-road car-suspension car-suv car-turbine carambola caravan cardboards cardboards-off cards caret-down caret-left caret-left-right caret-right caret-up caret-up-down carousel-horizontal carousel-vertical carrot carrot-off cash cash-banknote cash-banknote-edit cash-banknote-heart cash-banknote-minus cash-banknote-move cash-banknote-move-back cash-banknote-off cash-banknote-plus cash-edit cash-heart cash-minus cash-move cash-move-back cash-off cash-plus cash-register cast cast-off cat category category-2 category-minus category-plus ce ce-off cell cell-signal-1 cell-signal-2 cell-signal-3 cell-signal-4 cell-signal-5 cell-signal-off certificate certificate-2 certificate-2-off certificate-off chair-director chalkboard chalkboard-off chalkboard-teacher charging-pile chart-arcs chart-arcs-3 chart-area chart-area-line chart-arrows chart-arrows-vertical chart-bar chart-bar-off chart-bar-popular chart-bar-square chart-bubble chart-candle chart-circles chart-cohort chart-column chart-covariate chart-donut chart-donut-2 chart-donut-3 chart-donut-4 chart-dots chart-dots-2 chart-dots-3 chart-funnel chart-grid-dots chart-histogram chart-infographic chart-line chart-pie chart-pie-2 chart-pie-3 chart-pie-4 chart-pie-off chart-ppf chart-radar chart-sankey chart-scatter chart-scatter-3d chart-treemap chat-bubble-left chat-bubble-left-right check check-circle checkbox checklist checks checkup-list cheese chef-hat chef-hat-off cherry chess chess-bishop chess-king chess-knight chess-queen chess-rook chevron-compact-down chevron-compact-left chevron-compact-right chevron-compact-up chevron-down chevron-down-left chevron-down-right chevron-left chevron-left-pipe chevron-right chevron-right-pipe chevron-up chevron-up-left chevron-up-right chevrons-down chevrons-down-left chevrons-down-right chevrons-left chevrons-right chevrons-up chevrons-up-left chevrons-up-right chisel chocolate christmas-ball christmas-tree christmas-tree-off circle circle-arrow-down circle-arrow-down-left circle-arrow-down-right circle-arrow-left circle-arrow-right circle-arrow-up circle-arrow-up-left circle-arrow-up-right circle-asterisk circle-caret-down circle-caret-left circle-caret-right circle-caret-up circle-check circle-chevron-down circle-chevron-left circle-chevron-right circle-chevron-up circle-chevrons-down circle-chevrons-left circle-chevrons-right circle-chevrons-up circle-dashed circle-dashed-check circle-dashed-letter-a circle-dashed-letter-b circle-dashed-letter-c circle-dashed-letter-d circle-dashed-letter-e circle-dashed-letter-f circle-dashed-letter-g circle-dashed-letter-h circle-dashed-letter-i circle-dashed-letter-j circle-dashed-letter-k circle-dashed-letter-l circle-dashed-letter-m circle-dashed-letter-n circle-dashed-letter-o circle-dashed-letter-p circle-dashed-letter-q circle-dashed-letter-r circle-dashed-letter-s circle-dashed-letter-t circle-dashed-letter-u circle-dashed-letter-v circle-dashed-letter-w circle-dashed-letter-x circle-dashed-letter-y circle-dashed-letter-z circle-dashed-minus circle-dashed-number-0 circle-dashed-number-1 circle-dashed-number-2 circle-dashed-number-3 circle-dashed-number-4 circle-dashed-number-5 circle-dashed-number-6 circle-dashed-number-7 circle-dashed-number-8 circle-dashed-number-9 circle-dashed-percentage circle-dashed-plus circle-dashed-x circle-dot circle-dotted circle-dotted-letter-a circle-dotted-letter-b circle-dotted-letter-c circle-dotted-letter-d circle-dotted-letter-e circle-dotted-letter-f circle-dotted-letter-g circle-dotted-letter-h circle-dotted-letter-i circle-dotted-letter-j circle-dotted-letter-k circle-dotted-letter-l circle-dotted-letter-m circle-dotted-letter-n circle-dotted-letter-o circle-dotted-letter-p circle-dotted-letter-q circle-dotted-letter-r circle-dotted-letter-s circle-dotted-letter-t circle-dotted-letter-u circle-dotted-letter-v circle-dotted-letter-w circle-dotted-letter-x circle-dotted-letter-y circle-dotted-letter-z circle-half circle-half-2 circle-half-vertical circle-key circle-letter-a circle-letter-b circle-letter-c circle-letter-d circle-letter-e circle-letter-f circle-letter-g circle-letter-h circle-letter-i circle-letter-j circle-letter-k circle-letter-l circle-letter-m circle-letter-n circle-letter-o circle-letter-p circle-letter-q circle-letter-r circle-letter-s circle-letter-t circle-letter-u circle-letter-v circle-letter-w circle-letter-x circle-letter-y circle-letter-z circle-minus circle-minus-2 circle-number-0 circle-number-1 circle-number-2 circle-number-3 circle-number-4 circle-number-5 circle-number-6 circle-number-7 circle-number-8 circle-number-9 circle-off circle-open-arrow-down circle-open-arrow-left circle-open-arrow-right circle-open-arrow-up circle-percentage circle-plus circle-plus-2 circle-plus-minus circle-rectangle circle-rectangle-off circle-square circle-triangle circle-x circles circles-relation circuit-ammeter circuit-battery circuit-bulb circuit-capacitor circuit-capacitor-polarized circuit-cell circuit-cell-plus circuit-changeover circuit-diode circuit-diode-zener circuit-ground circuit-ground-digital circuit-inductor circuit-motor circuit-pushbutton circuit-resistor circuit-switch-closed circuit-switch-open circuit-voltmeter clear-all clear-formatting clef clef-staff click cliff-jumping clipboard clipboard-check clipboard-copy clipboard-data clipboard-document clipboard-document-check clipboard-document-list clipboard-heart clipboard-list clipboard-off clipboard-plus clipboard-search clipboard-smile clipboard-text clipboard-typography clipboard-x clock clock-12 clock-2 clock-24 clock-bitcoin clock-bolt clock-cancel clock-check clock-code clock-cog clock-dollar clock-down clock-edit clock-exclamation clock-heart clock-hour-1 clock-hour-10 clock-hour-11 clock-hour-12 clock-hour-2 clock-hour-3 clock-hour-4 clock-hour-5 clock-hour-6 clock-hour-7 clock-hour-8 clock-hour-9 clock-minus clock-off clock-pause clock-pin clock-play clock-plus clock-question clock-record clock-search clock-share clock-shield clock-star clock-stop clock-up clock-x clothes-rack clothes-rack-off cloud cloud-arrow-down cloud-arrow-up cloud-bitcoin cloud-bolt cloud-cancel cloud-check cloud-code cloud-cog cloud-computing cloud-data-connection cloud-dollar cloud-down cloud-download cloud-exclamation cloud-fog cloud-heart cloud-lock cloud-lock-open cloud-minus cloud-network cloud-off cloud-pause cloud-pin cloud-plus cloud-question cloud-rain cloud-search cloud-share cloud-snow cloud-star cloud-storm cloud-up cloud-upload cloud-x clover clover-2 clubs code code-ai code-asterisk code-circle code-circle-2 code-dots code-minus code-off code-plus code-variable code-variable-minus code-variable-plus codeblock coffee coffee-off coffin cog cog-6-tooth cog-8-tooth coin coin-bitcoin coin-euro coin-monero coin-off coin-pound coin-rupee coin-taka coin-yen coin-yuan coins color-filter color-picker color-picker-off color-swatch color-swatch-off column-insert-left column-insert-right column-remove columns columns-1 columns-2 columns-3 columns-off comet command command-off compass compass-off components components-off cone cone-2 cone-off cone-plus confetti confetti-off confucius congruent-to connection container container-off contract contrast contrast-2 contrast-2-off contrast-off cooker cookie cookie-man cookie-off copy copy-check copy-minus copy-off copy-plus copy-x copyleft copyleft-off copyright copyright-off corner-down-left corner-down-left-double corner-down-right corner-down-right-double corner-left-down corner-left-down-double corner-left-up corner-left-up-double corner-right-down corner-right-down-double corner-right-up corner-right-up-double corner-up-left corner-up-left-double corner-up-right corner-up-right-double cpu cpu-2 cpu-chip cpu-off crane crane-off create creative-commons creative-commons-by creative-commons-nc creative-commons-nd creative-commons-off creative-commons-sa creative-commons-zero credit-card credit-card-hand credit-card-off credit-card-pay credit-card-refund credits cricket crop crop-1-1 crop-16-9 crop-3-2 crop-5-4 crop-7-5 crop-landscape crop-portrait cross cross-off crosshair crown crown-off crutches crutches-off crystal-ball csv cube cube-3d-sphere cube-3d-sphere-off cube-off cube-plus cube-send cube-spark cube-unfolded cup cup-off curling curly-loop currency currency-afghani currency-bahraini currency-baht currency-bitcoin currency-cent currency-dinar currency-dirham currency-dogecoin currency-dollar currency-dollar-australian currency-dollar-brunei currency-dollar-canadian currency-dollar-guyanese currency-dollar-off currency-dollar-singapore currency-dollar-zimbabwean currency-dong currency-dram currency-ethereum currency-euro currency-euro-off currency-florin currency-forint currency-frank currency-guarani currency-hryvnia currency-husd currency-iranian-rial currency-kip currency-krone-czech currency-krone-danish currency-krone-swedish currency-lari currency-leu currency-lira currency-litecoin currency-lyd currency-manat currency-monero currency-naira currency-nano currency-off currency-paanga currency-peso currency-pound currency-pound-off currency-quetzal currency-real currency-renminbi currency-ripple currency-riyal currency-rubel currency-rufiyaa currency-rupee currency-rupee-nepalese currency-shekel currency-solana currency-som currency-taka currency-tenge currency-tether currency-tugrik currency-won currency-xrp currency-yen currency-yen-off currency-yuan currency-zcash currency-zloty current-location current-location-off cursor-off cursor-text cut cylinder cylinder-off cylinder-plus dashboard dashboard-off database database-cog database-dollar database-edit database-exclamation database-export database-heart database-import database-leak database-minus database-off database-plus database-search database-share database-smile database-star database-x deaf decimal deer delta dental dental-broken dental-off deselect desk details details-off device-3d-camera device-3d-lens device-airpods device-airpods-case device-airtag device-analytics device-audio-tape device-camera-phone device-cctv device-cctv-off device-computer-camera device-computer-camera-2 device-computer-camera-off device-desktop device-desktop-analytics device-desktop-bolt device-desktop-cancel device-desktop-check device-desktop-code device-desktop-cog device-desktop-dollar device-desktop-down device-desktop-exclamation device-desktop-heart device-desktop-minus device-desktop-off device-desktop-pause device-desktop-pin device-desktop-plus device-desktop-question device-desktop-search device-desktop-share device-desktop-star device-desktop-up device-desktop-x device-floppy device-gamepad device-gamepad-2 device-gamepad-3 device-heart-monitor device-imac device-imac-bolt device-imac-cancel device-imac-check device-imac-code device-imac-cog device-imac-dollar device-imac-down device-imac-exclamation device-imac-heart device-imac-minus device-imac-off device-imac-pause device-imac-pin device-imac-plus device-imac-question device-imac-search device-imac-share device-imac-star device-imac-up device-imac-x device-ipad device-ipad-bolt device-ipad-cancel device-ipad-check device-ipad-code device-ipad-cog device-ipad-dollar device-ipad-down device-ipad-exclamation device-ipad-heart device-ipad-horizontal device-ipad-horizontal-bolt device-ipad-horizontal-cancel device-ipad-horizontal-check device-ipad-horizontal-code device-ipad-horizontal-cog device-ipad-horizontal-dollar device-ipad-horizontal-down device-ipad-horizontal-exclamation device-ipad-horizontal-heart device-ipad-horizontal-minus device-ipad-horizontal-off device-ipad-horizontal-pause device-ipad-horizontal-pin device-ipad-horizontal-plus device-ipad-horizontal-question device-ipad-horizontal-search device-ipad-horizontal-share device-ipad-horizontal-star device-ipad-horizontal-up device-ipad-horizontal-x device-ipad-minus device-ipad-off device-ipad-pause device-ipad-pin device-ipad-plus device-ipad-question device-ipad-search device-ipad-share device-ipad-star device-ipad-up device-ipad-x device-landline-phone device-laptop device-laptop-off device-mobile device-mobile-bolt device-mobile-cancel device-mobile-charging device-mobile-check device-mobile-code device-mobile-cog device-mobile-dollar device-mobile-down device-mobile-exclamation device-mobile-heart device-mobile-message device-mobile-minus device-mobile-off device-mobile-pause device-mobile-pin device-mobile-plus device-mobile-question device-mobile-rotated device-mobile-search device-mobile-share device-mobile-star device-mobile-up device-mobile-vibration device-mobile-x device-nintendo device-nintendo-off device-projector device-remote device-screen device-sd-card device-sim device-sim-1 device-sim-2 device-sim-3 device-speaker device-speaker-off device-tablet device-tablet-bolt device-tablet-cancel device-tablet-check device-tablet-code device-tablet-cog device-tablet-dollar device-tablet-down device-tablet-exclamation device-tablet-heart device-tablet-minus device-tablet-off device-tablet-pause device-tablet-pin device-tablet-plus device-tablet-question device-tablet-search device-tablet-share device-tablet-star device-tablet-up device-tablet-x device-tv device-tv-off device-tv-old device-unknown device-usb device-vision-pro device-watch device-watch-bolt device-watch-cancel device-watch-check device-watch-code device-watch-cog device-watch-dollar device-watch-down device-watch-exclamation device-watch-heart device-watch-minus device-watch-off device-watch-pause device-watch-pin device-watch-plus device-watch-question device-watch-search device-watch-share device-watch-star device-watch-stats device-watch-stats-2 device-watch-up device-watch-x devices devices-2 devices-bolt devices-cancel devices-check devices-code devices-cog devices-dollar devices-down devices-exclamation devices-heart devices-minus devices-off devices-pause devices-pc devices-pc-off devices-pin devices-plus devices-question devices-search devices-share devices-star devices-up devices-x diabolo diabolo-off diabolo-plus dialpad dialpad-off diamond diamond-off diamonds diaper dice dice-1 dice-2 dice-3 dice-4 dice-5 dice-6 dimensions direction direction-arrows direction-horizontal direction-sign direction-sign-off directions directions-off disabled disabled-2 disabled-off disc disc-golf disc-off discount discount-off divide dna dna-2 dna-2-off dna-off document document-duplicate document-text dog dog-bowl done door door-enter door-exit door-hanger door-off dots dots-circle-horizontal dots-diagonal dots-diagonal-2 dots-vertical download download-off drag-drop drag-drop-2 drone drone-off drop-circle droplet droplet-bolt droplet-cancel droplet-check droplet-code droplet-cog droplet-dollar droplet-down droplet-exclamation droplet-half droplet-half-2 droplet-heart droplet-minus droplet-off droplet-pause droplet-pin droplet-plus droplet-question droplet-search droplet-share droplet-star droplet-up droplet-x droplets dual-screen dumbbell dumpling e-passport ear ear-off ear-scan earphone-bluetooth ease-in ease-in-control-point ease-in-out ease-in-out-control-points ease-out ease-out-control-point edit edit-circle edit-circle-off edit-off egg egg-cracked egg-fried egg-off eggs elevator elevator-off ellipsis-horizontal ellipsis-vertical email-stamp emergency-bed empathize empathize-off emphasis engine engine-off envelope equal equal-double equal-not eraser eraser-off error error-404 error-404-off escalator escalator-down escalator-up exchange exchange-off exclamation-circle exclamation-mark exclamation-mark-off exclamation-triangle exercise-ball explicit explicit-off exposure exposure-0 exposure-minus-1 exposure-minus-2 exposure-off exposure-plus-1 exposure-plus-2 external-link external-link-off eye eye-bitcoin eye-bolt eye-cancel eye-check eye-closed eye-code eye-cog eye-discount eye-dollar eye-dotted eye-down eye-edit eye-exclamation eye-heart eye-minus eye-off eye-pause eye-pin eye-plus eye-question eye-search eye-share eye-slash eye-spark eye-star eye-table eye-up eye-x eyeglass eyeglass-2 eyeglass-off face-id face-id-error face-mask face-mask-off fall favicon feather feather-off fence fence-off ferry fidget-spinner file file-3d file-ai file-alert file-analytics file-arrow-left file-arrow-right file-barcode file-bitcoin file-broken file-certificate file-chart file-check file-code file-code-2 file-cv file-database file-delta file-description file-diff file-digit file-dislike file-dollar file-dots file-download file-euro file-excel file-export file-function file-horizontal file-import file-infinity file-info file-invoice file-isr file-lambda file-like file-minus file-music file-neutral file-off file-orientation file-pencil file-percent file-phone file-plus file-power file-report file-rss file-sad file-scissors file-search file-settings file-shredder file-signal file-smile file-spark file-spreadsheet file-stack file-star file-symlink file-text file-text-ai file-text-shield file-text-spark file-time file-type-bmp file-type-css file-type-csv file-type-doc file-type-docx file-type-html file-type-jpg file-type-js file-type-jsx file-type-pdf file-type-php file-type-png file-type-ppt file-type-rs file-type-sql file-type-svg file-type-ts file-type-tsx file-type-txt file-type-vue file-type-xls file-type-xml file-type-zip file-typography file-unknown file-upload file-vector file-word file-x file-zip files files-off filter filter-2 filter-2-bolt filter-2-cancel filter-2-check filter-2-code filter-2-cog filter-2-discount filter-2-dollar filter-2-down filter-2-edit filter-2-exclamation filter-2-minus filter-2-pause filter-2-pin filter-2-plus filter-2-question filter-2-search filter-2-share filter-2-spark filter-2-up filter-2-x filter-bolt filter-cancel filter-check filter-code filter-cog filter-discount filter-dollar filter-down filter-edit filter-exclamation filter-heart filter-minus filter-off filter-pause filter-pin filter-plus filter-question filter-search filter-share filter-spark filter-star filter-up filter-x filters fingerprint fingerprint-off fingerprint-scan fire-extinguisher fire-hydrant fire-hydrant-off firetruck firewall-check firewall-flame first-aid-kit first-aid-kit-off fish fish-bone fish-christianity fish-hook fish-hook-off fish-off flag flag-2 flag-2-off flag-3 flag-bitcoin flag-bolt flag-cancel flag-check flag-code flag-cog flag-discount flag-dollar flag-down flag-exclamation flag-heart flag-minus flag-off flag-pause flag-pin flag-plus flag-question flag-search flag-share flag-spark flag-star flag-up flag-x flame flame-off flare flask flask-2 flask-2-off flask-off flip-flops flip-horizontal flip-vertical float-center float-left float-none float-right flood flower flower-off focus focus-2 focus-auto focus-centered fold fold-down fold-up folder folder-bolt folder-cancel folder-check folder-code folder-cog folder-dollar folder-down folder-exclamation folder-heart folder-minus folder-off folder-open folder-pause folder-pin folder-plus folder-question folder-root folder-search folder-share folder-star folder-symlink folder-up folder-x folders folders-off foodsteps forbid forbid-2 forklift forms fountain fountain-off frame frame-off free-rights freeze-column freeze-row freeze-row-column fridge fridge-off friends friends-off frustum frustum-off frustum-plus function function-off galaxy garden-cart garden-cart-off gas-station gas-station-off gauge gauge-off gavel gender-agender gender-androgyne gender-bigender gender-demiboy gender-demigirl gender-epicene gender-female gender-femme gender-genderfluid gender-genderless gender-genderqueer gender-hermaphrodite gender-intergender gender-male gender-neutrois gender-third gender-transgender gender-trasvesti geometry ghost ghost-2 ghost-3 ghost-off gif gift gift-card gift-off git-branch git-branch-deleted git-cherry-pick git-commit git-compare git-fork git-merge git-pull-request git-pull-request-closed git-pull-request-conflict git-pull-request-draft gizmo glass glass-champagne glass-cocktail glass-full glass-gin glass-off globe globe-alt globe-off go-game golf golf-off gps gradienter grain grape graph graph-off grave grave-2 grid-3x3 grid-4x4 grid-dots grid-goldenratio grid-pattern grid-scan grill grill-fork grill-off grill-spatula grip-horizontal grip-vertical growth guitar-pick gymnastics h-1 h-2 h-3 h-4 h-5 h-6 hammer hammer-drill hammer-off hand-click hand-click-off hand-finger hand-finger-down hand-finger-left hand-finger-off hand-finger-right hand-grab hand-little-finger hand-love-you hand-middle-finger hand-move hand-off hand-ring-finger hand-sanitizer hand-stop hand-three-fingers hand-two-fingers hanger hanger-2 hanger-off hash hashtag haze haze-moon hdr heading heading-off headphones headphones-off headset headset-off health-recognition heart heart-bitcoin heart-bolt heart-broken heart-cancel heart-check heart-code heart-cog heart-discount heart-dollar heart-down heart-exclamation heart-handshake heart-minus heart-off heart-pause heart-pin heart-plus heart-question heart-rate-monitor heart-search heart-share heart-spark heart-star heart-up heart-x heartbeat hearts hearts-off helicopter helicopter-landing helmet helmet-off help help-circle help-hexagon help-octagon help-off help-small help-square help-square-rounded help-triangle hemisphere hemisphere-off hemisphere-plus hexagon hexagon-3d hexagon-asterisk hexagon-letter-a hexagon-letter-b hexagon-letter-c hexagon-letter-d hexagon-letter-e hexagon-letter-f hexagon-letter-g hexagon-letter-h hexagon-letter-i hexagon-letter-j hexagon-letter-k hexagon-letter-l hexagon-letter-m hexagon-letter-n hexagon-letter-o hexagon-letter-p hexagon-letter-q hexagon-letter-r hexagon-letter-s hexagon-letter-t hexagon-letter-u hexagon-letter-v hexagon-letter-w hexagon-letter-x hexagon-letter-y hexagon-letter-z hexagon-minus hexagon-minus-2 hexagon-number-0 hexagon-number-1 hexagon-number-2 hexagon-number-3 hexagon-number-4 hexagon-number-5 hexagon-number-6 hexagon-number-7 hexagon-number-8 hexagon-number-9 hexagon-off hexagon-plus hexagon-plus-2 hexagonal-prism hexagonal-prism-off hexagonal-prism-plus hexagonal-pyramid hexagonal-pyramid-off hexagonal-pyramid-plus hexagons hexagons-off hierarchy hierarchy-2 hierarchy-3 hierarchy-off highlight highlight-off history history-off history-toggle home home-2 home-bitcoin home-bolt home-cancel home-check home-cog home-dollar home-dot home-down home-eco home-edit home-exclamation home-hand home-heart home-infinity home-link home-lock home-minus home-move home-off home-plus home-question home-ribbon home-search home-share home-shield home-signal home-spark home-star home-stats home-up home-x horse horse-toy horseshoe hospital hospital-circle hotel-service hourglass hourglass-empty hourglass-high hourglass-low hourglass-off hours-12 hours-24 html http-connect http-connect-off http-delete http-delete-off http-get http-get-off http-head http-head-off http-options http-options-off http-patch http-patch-off http-post http-post-off http-put http-put-off http-que http-que-off http-trace http-trace-off hula-hoop ice-cream ice-cream-2 ice-cream-off ice-skating iceberg icons icons-off id id-badge id-badge-2 id-badge-off id-off identification ikosaedr image-generation image-in-picture inbox inbox-off indent-decrease indent-increase infinity infinity-2 infinity-off info-circle info-hexagon info-octagon info-small info-square info-square-rounded info-triangle information-circle inner-shadow-bottom inner-shadow-bottom-left inner-shadow-bottom-right inner-shadow-left inner-shadow-right inner-shadow-top inner-shadow-top-left inner-shadow-top-right input-ai input-check input-search input-spark input-x invoice ironing ironing-1 ironing-2 ironing-3 ironing-off ironing-steam ironing-steam-off irregular-polyhedron irregular-polyhedron-off irregular-polyhedron-plus italic jacket jetpack jetski jewish-star join-bevel join-round join-straight joker jpg json jump-rope karate kayak kerning key key-off keyboard keyboard-hide keyboard-off keyboard-show keyframe keyframe-align-center keyframe-align-horizontal keyframe-align-vertical keyframes label label-important label-off ladder ladder-off ladle lambda lamp lamp-2 lamp-off lane language language-hiragana language-katakana language-off lasso lasso-off lasso-polygon laurel-wreath laurel-wreath-1 laurel-wreath-2 laurel-wreath-3 lawn-mower layers-difference layers-intersect layers-intersect-2 layers-linked layers-off layers-selected layers-selected-bottom layers-subtract layers-union layout layout-2 layout-align-bottom layout-align-center layout-align-left layout-align-middle layout-align-right layout-align-top layout-board layout-board-split layout-bottombar layout-bottombar-collapse layout-bottombar-expand layout-bottombar-inactive layout-cards layout-collage layout-columns layout-dashboard layout-distribute-horizontal layout-distribute-vertical layout-grid layout-grid-add layout-grid-remove layout-kanban layout-list layout-navbar layout-navbar-collapse layout-navbar-expand layout-navbar-inactive layout-off layout-rows layout-sidebar layout-sidebar-inactive layout-sidebar-left-collapse layout-sidebar-left-expand layout-sidebar-right layout-sidebar-right-collapse layout-sidebar-right-expand layout-sidebar-right-inactive leaf leaf-2 leaf-maple leaf-off lego lego-off lemon lemon-2 letter-a letter-a-small letter-b letter-b-small letter-c letter-c-small letter-case letter-case-lower letter-case-toggle letter-case-upper letter-d letter-d-small letter-e letter-e-small letter-f letter-f-small letter-g letter-g-small letter-h letter-h-small letter-i letter-i-small letter-j letter-j-small letter-k letter-k-small letter-l letter-l-small letter-m letter-m-small letter-n letter-n-small letter-o letter-o-small letter-p letter-p-small letter-q letter-q-small letter-r letter-r-small letter-s letter-s-small letter-spacing letter-t letter-t-small letter-u letter-u-small letter-v letter-v-small letter-w letter-w-small letter-x letter-x-small letter-y letter-y-small letter-z letter-z-small library library-minus library-photo library-plus license license-off lifebuoy lifebuoy-off light-bulb lighter line line-dashed line-dotted line-height line-scan link link-minus link-off link-plus list list-check list-details list-letters list-numbers list-search list-tree live-photo live-photo-off live-view load-balancer loader loader-2 loader-3 loader-4 loader-quarter location location-bolt location-broken location-cancel location-check location-code location-cog location-discount location-dollar location-down location-exclamation location-heart location-minus location-off location-pause location-pin location-plus location-question location-search location-share location-star location-up location-x lock lock-access lock-access-off lock-bitcoin lock-bolt lock-cancel lock-check lock-closed lock-code lock-cog lock-dollar lock-down lock-exclamation lock-heart lock-minus lock-off lock-open lock-open-2 lock-open-off lock-password lock-pause lock-pin lock-plus lock-question lock-search lock-share lock-square lock-square-rounded lock-star lock-up lock-x locked logic-and logic-buffer logic-nand logic-nor logic-not logic-or logic-xnor logic-xor login login-2 logout logout-2 logs lollipop lollipop-off luggage luggage-off lungs lungs-off macro macro-off magnet magnet-off magnetic magnifying-glass mail mail-ai mail-bitcoin mail-bolt mail-cancel mail-check mail-code mail-cog mail-dollar mail-down mail-exclamation mail-fast mail-forward mail-heart mail-minus mail-off mail-opened mail-pause mail-pin mail-plus mail-question mail-search mail-share mail-spark mail-star mail-up mail-x mailbox mailbox-off man manual-gearbox map map-2 map-bolt map-cancel map-check map-code map-cog map-discount map-dollar map-down map-east map-exclamation map-heart map-lock map-minus map-north map-off map-pause map-pin map-pin-2 map-pin-bolt map-pin-cancel map-pin-check map-pin-code map-pin-cog map-pin-dollar map-pin-down map-pin-exclamation map-pin-heart map-pin-minus map-pin-off map-pin-pause map-pin-pin map-pin-plus map-pin-question map-pin-search map-pin-share map-pin-star map-pin-up map-pin-x map-pins map-plus map-question map-route map-search map-share map-shield map-south map-star map-up map-west map-x markdown markdown-off marquee marquee-2 marquee-off mars mask mask-off masks-theater masks-theater-off massage matchstick math math-1-divide-2 math-1-divide-3 math-avg math-cos math-ctg math-equal-greater math-equal-lower math-function math-function-off math-function-y math-greater math-integral math-integral-x math-integrals math-lower math-max math-max-min math-min math-not math-off math-pi math-pi-divide-2 math-sec math-sin math-symbols math-tg math-x-divide-2 math-x-divide-y math-x-divide-y-2 math-x-floor-divide-y math-x-minus-x math-x-minus-y math-x-plus-x math-x-plus-y math-xy math-y-minus-y math-y-plus-y matrix maximize maximize-off meat meat-off medal medal-2 medical-cross medical-cross-circle medical-cross-off medicine-syrup meeple melon menorah menu menu-2 menu-3 menu-4 menu-deep menu-order mesh message message-2 message-2-bolt message-2-cancel message-2-check message-2-code message-2-cog message-2-dollar message-2-down message-2-exclamation message-2-heart message-2-minus message-2-off message-2-pause message-2-pin message-2-plus message-2-question message-2-search message-2-share message-2-star message-2-up message-2-x message-bolt message-cancel message-chatbot message-check message-circle message-circle-bolt message-circle-cancel message-circle-check message-circle-code message-circle-cog message-circle-dollar message-circle-down message-circle-exclamation message-circle-heart message-circle-minus message-circle-off message-circle-pause message-circle-pin message-circle-plus message-circle-question message-circle-search message-circle-share message-circle-star message-circle-up message-circle-user message-circle-x message-code message-cog message-dollar message-dots message-down message-exclamation message-forward message-heart message-language message-minus message-off message-pause message-pin message-plus message-question message-reply message-report message-search message-share message-star message-up message-user message-x messages messages-off meteor meteor-off meter-cube meter-square metronome michelin-bib-gourmand michelin-star michelin-star-green mickey microfrontends microphone microphone-2 microphone-2-off microphone-off microscope microscope-off microwave microwave-off middleware military-award military-rank milk milk-off milkshake minimize minus minus-circle minus-vertical mist mist-off mobiledata mobiledata-off moneybag moneybag-edit moneybag-heart moneybag-minus moneybag-move moneybag-move-back moneybag-plus monkeybar mood-angry mood-annoyed mood-annoyed-2 mood-bitcoin mood-boy mood-check mood-cog mood-confuzed mood-crazy-happy mood-cry mood-dollar mood-edit mood-empty mood-happy mood-heart mood-kid mood-look-down mood-look-left mood-look-right mood-look-up mood-minus mood-nerd mood-nervous mood-neutral mood-off mood-pin mood-plus mood-puzzled mood-sad mood-sad-2 mood-sad-dizzy mood-sad-squint mood-search mood-share mood-sick mood-silence mood-sing mood-smile mood-smile-beam mood-smile-dizzy mood-spark mood-surprised mood-tongue mood-tongue-wink mood-tongue-wink-2 mood-unamused mood-up mood-wink mood-wink-2 mood-wrrr mood-x mood-xd moon moon-2 moon-off moon-stars moped mosque motorbike mountain mountain-off mouse mouse-2 mouse-off moustache movie movie-off mug mug-off multiplier-0-5x multiplier-1-5x multiplier-1x multiplier-2x mushroom mushroom-off music music-bolt music-cancel music-check music-code music-cog music-discount music-dollar music-down music-exclamation music-heart music-minus music-off music-pause music-pin music-plus music-question music-search music-share music-star music-up music-x navigation navigation-bolt navigation-cancel navigation-check navigation-code navigation-cog navigation-discount navigation-dollar navigation-down navigation-east navigation-exclamation navigation-heart navigation-minus navigation-north navigation-off navigation-pause navigation-pin navigation-plus navigation-question navigation-search navigation-share navigation-south navigation-star navigation-top navigation-up navigation-west navigation-x needle needle-thread network network-off new-section news news-off nfc nfc-off no-copyright no-creative-commons no-derivatives noise-reduction north-star notdef note note-off notebook notebook-off notes notes-off notification notification-off notifications_active number number-0 number-0-small number-1 number-1-small number-10 number-10-small number-100-small number-11 number-11-small number-12-small number-123 number-13-small number-14-small number-15-small number-16-small number-17-small number-18-small number-19-small number-2 number-2-small number-20-small number-21-small number-22-small number-23-small number-24-small number-25-small number-26-small number-27-small number-28-small number-29-small number-3 number-3-small number-30-small number-31-small number-32-small number-33-small number-34-small number-35-small number-36-small number-37-small number-38-small number-39-small number-4 number-4-small number-40-small number-41-small number-42-small number-43-small number-44-small number-45-small number-46-small number-47-small number-48-small number-49-small number-5 number-5-small number-50-small number-51-small number-52-small number-53-small number-54-small number-55-small number-56-small number-57-small number-58-small number-59-small number-6 number-6-small number-60-small number-61-small number-62-small number-63-small number-64-small number-65-small number-66-small number-67-small number-68-small number-69-small number-7 number-7-small number-70-small number-71-small number-72-small number-73-small number-74-small number-75-small number-76-small number-77-small number-78-small number-79-small number-8 number-8-small number-80-small number-81-small number-82-small number-83-small number-84-small number-85-small number-86-small number-87-small number-88-small number-89-small number-9 number-9-small number-90-small number-91-small number-92-small number-93-small number-94-small number-95-small number-96-small number-97-small number-98-small number-99-small numbers nurse nut object-scan octagon octagon-minus octagon-minus-2 octagon-off octagon-plus octagon-plus-2 octahedron octahedron-off octahedron-plus old olympic-torch olympics olympics-off om omega option outbound outlet oval oval-vertical overline package package-export package-import package-off packages pacman page-break paint paint-off palette palette-off panorama-horizontal panorama-horizontal-off panorama-vertical panorama-vertical-off paper-airplane paper-bag paper-bag-off paperclip parachute parachute-off parentheses parentheses-off parking parking-circle parking-meter parking-off password password-fingerprint password-mobile-phone password-user paw paw-off paywall pdf peace pencil pencil-bolt pencil-cancel pencil-check pencil-code pencil-cog pencil-discount pencil-dollar pencil-down pencil-exclamation pencil-heart pencil-minus pencil-off pencil-pause pencil-pin pencil-plus pencil-question pencil-search pencil-share pencil-star pencil-up pencil-x pendulum pennant pennant-2 pennant-off pentagon pentagon-minus pentagon-number-0 pentagon-number-1 pentagon-number-2 pentagon-number-3 pentagon-number-4 pentagon-number-5 pentagon-number-6 pentagon-number-7 pentagon-number-8 pentagon-number-9 pentagon-off pentagon-plus pentagon-x pentagram pepper pepper-off percent percent-badge percentage percentage-0 percentage-10 percentage-100 percentage-20 percentage-25 percentage-30 percentage-33 percentage-40 percentage-50 percentage-60 percentage-66 percentage-70 percentage-75 percentage-80 percentage-90 perfume perspective perspective-off phone phone-call phone-calling phone-check phone-done phone-end phone-incoming phone-off phone-outgoing phone-pause phone-plus phone-ringing phone-spark phone-x photo photo-ai photo-alt photo-bitcoin photo-bolt photo-cancel photo-check photo-circle photo-circle-minus photo-circle-plus photo-code photo-cog photo-dollar photo-down photo-edit photo-exclamation photo-heart photo-hexagon photo-minus photo-off photo-pause photo-pentagon photo-pin photo-plus photo-question photo-scan photo-search photo-sensor photo-sensor-2 photo-sensor-3 photo-share photo-shield photo-spark photo-square-rounded photo-star photo-up photo-video photo-x physotherapist piano pick picnic-table picture-in-picture picture-in-picture-off picture-in-picture-on picture-in-picture-top pig pig-money pig-off pilcrow pilcrow-left pilcrow-right pill pill-off pillow pills pin pin-end pin-invoke ping-pong pinned pinned-off pipeline pizza pizza-off placeholder plane plane-arrival plane-departure plane-inflight plane-off plane-tilt planet planet-off plant plant-2 plant-2-off plant-off play play-basketball play-card play-card-1 play-card-10 play-card-2 play-card-3 play-card-4 play-card-5 play-card-6 play-card-7 play-card-8 play-card-9 play-card-a play-card-j play-card-k play-card-off play-card-q play-card-star play-circle play-football play-handball play-volleyball player-eject player-pause player-play player-record player-skip-back player-skip-forward player-stop player-track-next player-track-prev playlist playlist-add playlist-off playlist-x playstation-circle playstation-square playstation-triangle playstation-x plug plug-connected plug-connected-x plug-off plug-x plunger plus plus-circle plus-equal plus-minus png podium podium-off point point-off pointer pointer-2 pointer-bolt pointer-cancel pointer-check pointer-code pointer-cog pointer-collaboration pointer-collaboration-2 pointer-dollar pointer-down pointer-exclamation pointer-heart pointer-minus pointer-off pointer-pause pointer-pin pointer-plus pointer-question pointer-search pointer-share pointer-star pointer-up pointer-x pokeball pokeball-off poker-chip polaroid polygon polygon-off poo pool pool-off power pray premium-rights prescription presentation presentation-analytics presentation-chart-bar presentation-chart-line presentation-off printer printer-off prism prism-light prism-off prism-plus prison progress progress-alert progress-bolt progress-check progress-down progress-help progress-x prompt prong propeller propeller-off protocol pumpkin-scary puzzle puzzle-2 puzzle-off puzzle-piece pyramid pyramid-off pyramid-plus qrcode qrcode-off question-mark queue-pop-in queue-pop-out quote quote-off quote-open quotes radar radar-2 radar-off radio radio-off radioactive radioactive-off radius-bottom-left radius-bottom-right radius-top-left radius-top-right rainbow rainbow-off rating-12-plus rating-14-plus rating-16-plus rating-18-plus rating-21-plus razor razor-electric receipt receipt-2 receipt-bitcoin receipt-dollar receipt-euro receipt-off receipt-pound receipt-refund receipt-rupee receipt-tax receipt-yen receipt-yuan recharging record-mail record-mail-off rectangle rectangle-rounded-bottom rectangle-rounded-top rectangle-vertical rectangular-prism rectangular-prism-off rectangular-prism-plus recycle recycle-off refresh refresh-alert refresh-dot refresh-off regex regex-off registered relation-many-to-many relation-one-to-many relation-one-to-one reload reorder repeat repeat-off repeat-once replace replace-off replace-user report report-analytics report-medical report-money report-off report-search reserved-line resize restore rewind-backward-10 rewind-backward-15 rewind-backward-20 rewind-backward-30 rewind-backward-40 rewind-backward-5 rewind-backward-50 rewind-backward-60 rewind-forward-10 rewind-forward-15 rewind-forward-20 rewind-forward-30 rewind-forward-40 rewind-forward-5 rewind-forward-50 rewind-forward-60 ribbon-health rings ripple ripple-down ripple-off ripple-up road road-off road-sign robot robot-face robot-off rocket rocket-launch rocket-off roller-skating rollercoaster rollercoaster-off rosette rosette-asterisk rosette-discount rosette-discount-check rosette-discount-check-off rosette-discount-off rosette-number-0 rosette-number-1 rosette-number-2 rosette-number-3 rosette-number-4 rosette-number-5 rosette-number-6 rosette-number-7 rosette-number-8 rosette-number-9 rotate rotate-2 rotate-360 rotate-3d rotate-clockwise rotate-clockwise-2 rotate-dot rotate-rectangle roulette route route-2 route-alt-left route-alt-right route-off route-scan route-square route-square-2 route-x route-x-2 router router-off row-insert-bottom row-insert-top row-remove rss rubber-stamp rubber-stamp-off rugby ruler ruler-2 ruler-2-off ruler-3 ruler-measure ruler-measure-2 ruler-off run rv-truck s-turn-down s-turn-left s-turn-right s-turn-up sailboat sailboat-2 sailboat-off salad salt sandbox satellite satellite-off sausage scale scale-off scale-outline scale-outline-off scan scan-cube scan-eye scan-letter-a scan-letter-t scan-position scan-traces schema schema-off school school-bell school-off scissors scissors-off scooter scooter-electric scoreboard screen-share screen-share-off screenshot scribble scribble-off script script-minus script-plus script-x scuba-diving scuba-diving-tank scuba-mask scuba-mask-off sdk search search-off section section-sign seedling seedling-off segway select select-all selector send send-2 send-off seo separator separator-horizontal separator-vertical server server-2 server-bolt server-cog server-off server-spark serverless servicemark settings settings-2 settings-ai settings-automation settings-bolt settings-cancel settings-check settings-code settings-cog settings-dollar settings-down settings-exclamation settings-heart settings-minus settings-off settings-pause settings-pin settings-plus settings-question settings-search settings-share settings-spark settings-star settings-up settings-x shadow shadow-off shape shape-2 shape-3 shape-off share share-2 share-3 share-off shareplay shield shield-bolt shield-cancel shield-check shield-checkered shield-chevron shield-code shield-cog shield-dollar shield-down shield-exclamation shield-half shield-heart shield-lock shield-minus shield-off shield-pause shield-pin shield-plus shield-question shield-search shield-share shield-star shield-up shield-x ship ship-off shirt shirt-off shirt-sport shoe shoe-off shopping-bag shopping-bag-check shopping-bag-discount shopping-bag-edit shopping-bag-exclamation shopping-bag-heart shopping-bag-minus shopping-bag-plus shopping-bag-search shopping-bag-x shopping-cart shopping-cart-bolt shopping-cart-cancel shopping-cart-check shopping-cart-code shopping-cart-cog shopping-cart-copy shopping-cart-discount shopping-cart-dollar shopping-cart-down shopping-cart-exclamation shopping-cart-heart shopping-cart-minus shopping-cart-off shopping-cart-pause shopping-cart-pin shopping-cart-plus shopping-cart-question shopping-cart-search shopping-cart-share shopping-cart-star shopping-cart-up shopping-cart-x shovel shovel-pitchforks shredder sign-left sign-right signal-2g signal-3g signal-4g signal-4g-plus signal-5g signal-6g signal-e signal-g signal-h signal-h-plus signal-lte signature signature-off sitemap sitemap-off skateboard skateboard-off skateboarding sketching skew-x skew-y ski-jumping skull slash slashes sleigh slice slideshow smart-home smart-home-off smoking smoking-no snowboarding snowflake snowflake-off snowman soccer-field social social-off sock sofa sofa-off solar-electricity solar-panel solar-panel-2 sort-0-9 sort-9-0 sort-a-z sort-ascending sort-ascending-2 sort-ascending-letters sort-ascending-numbers sort-ascending-shapes sort-ascending-small-big sort-descending sort-descending-2 sort-descending-letters sort-descending-numbers sort-descending-shapes sort-descending-small-big sort-z-a sos soup soup-off source-code space space-off spaces spacing-horizontal spacing-vertical spade sparkle sparkle-2 sparkle-highlight sparkles sparkles-2 speakerphone speedboat sphere sphere-2 sphere-off sphere-plus spider spiral spiral-off sport-billard spray spy spy-off sql square square-arrow-down square-arrow-left square-arrow-right square-arrow-up square-asterisk square-check square-chevron-down square-chevron-left square-chevron-right square-chevron-up square-chevrons-down square-chevrons-left square-chevrons-right square-chevrons-up square-dashed square-dot square-f0 square-f1 square-f2 square-f3 square-f4 square-f5 square-f6 square-f7 square-f8 square-f9 square-forbid square-forbid-2 square-half square-key square-letter-a square-letter-b square-letter-c square-letter-d square-letter-e square-letter-f square-letter-g square-letter-h square-letter-i square-letter-j square-letter-k square-letter-l square-letter-m square-letter-n square-letter-o square-letter-p square-letter-q square-letter-r square-letter-s square-letter-t square-letter-u square-letter-v square-letter-w square-letter-x square-letter-y square-letter-z square-minus square-minus-2 square-number-0 square-number-1 square-number-2 square-number-3 square-number-4 square-number-5 square-number-6 square-number-7 square-number-8 square-number-9 square-off square-percentage square-plus square-plus-2 square-root square-root-2 square-rotated square-rotated-asterisk square-rotated-forbid square-rotated-forbid-2 square-rotated-off square-rounded square-rounded-arrow-down square-rounded-arrow-left square-rounded-arrow-right square-rounded-arrow-up square-rounded-check square-rounded-chevron-down square-rounded-chevron-left square-rounded-chevron-right square-rounded-chevron-up square-rounded-chevrons-down square-rounded-chevrons-left square-rounded-chevrons-right square-rounded-chevrons-up square-rounded-letter-a square-rounded-letter-b square-rounded-letter-c square-rounded-letter-d square-rounded-letter-e square-rounded-letter-f square-rounded-letter-g square-rounded-letter-h square-rounded-letter-i square-rounded-letter-j square-rounded-letter-k square-rounded-letter-l square-rounded-letter-m square-rounded-letter-n square-rounded-letter-o square-rounded-letter-p square-rounded-letter-q square-rounded-letter-r square-rounded-letter-s square-rounded-letter-t square-rounded-letter-u square-rounded-letter-v square-rounded-letter-w square-rounded-letter-x square-rounded-letter-y square-rounded-letter-z square-rounded-minus square-rounded-minus-2 square-rounded-number-0 square-rounded-number-1 square-rounded-number-2 square-rounded-number-3 square-rounded-number-4 square-rounded-number-5 square-rounded-number-6 square-rounded-number-7 square-rounded-number-8 square-rounded-number-9 square-rounded-percentage square-rounded-plus square-rounded-plus-2 square-rounded-x square-toggle square-toggle-horizontal square-x squares squares-diagonal squares-selected stack stack-2 stack-3 stack-back stack-backward stack-forward stack-front stack-middle stack-pop stack-push stairs stairs-down stairs-up star star-half star-off stars stars-off status-change steam steering-wheel steering-wheel-off step-into step-out stereo-glasses stethoscope stethoscope-off sticker sticker-2 stopwatch storm storm-off stretching stretching-2 strikethrough stroke-curved stroke-dynamic stroke-straight submarine subscript subtask subtitles subtitles-ai subtitles-edit subtitles-off sum sum-off sun sun-electricity sun-high sun-low sun-moon sun-off sun-wind sunglasses sunrise sunset sunset-2 superscript svg swimming swipe swipe-down swipe-left swipe-right swipe-up switch switch-2 switch-3 switch-horizontal switch-vertical sword sword-off swords table table-alias table-column table-dashed table-down table-export table-heart table-import table-minus table-off table-options table-plus table-row table-share table-shortcut table-spark tag tag-minus tag-off tag-plus tag-starred tags tags-off taiwan-dollar tallymark-1 tallymark-2 tallymark-3 tallymark-4 tallymarks tank target target-2 target-arrow target-off tax tax-euro tax-pound teapot telescope telescope-off temperature temperature-celsius temperature-fahrenheit temperature-minus temperature-off temperature-plus temperature-snow temperature-sun template template-off tent tent-off terminal terminal-2 test-pipe test-pipe-2 test-pipe-off tex text-caption text-color text-decrease text-direction-ltr text-direction-rtl text-grammar text-increase text-orientation text-plus text-recognition text-resize text-scan-2 text-scan-ai text-size text-spellcheck text-wrap text-wrap-column text-wrap-disabled texture theater thermometer thumb-down thumb-down-off thumb-up thumb-up-off tic-tac ticket ticket-off tie tilde tilt-shift tilt-shift-off time-duration-0 time-duration-10 time-duration-15 time-duration-30 time-duration-45 time-duration-5 time-duration-60 time-duration-90 time-duration-off timeline timeline-event timeline-event-exclamation timeline-event-minus timeline-event-plus timeline-event-text timeline-event-x timezone tip-jar tip-jar-euro tip-jar-pound tir today toggle-left toggle-right toilet-paper toilet-paper-off toml tool tools tools-kitchen tools-kitchen-2 tools-kitchen-2-off tools-kitchen-3 tools-kitchen-off tools-off tooltip topology-bus topology-complex topology-full topology-full-hierarchy topology-ring topology-ring-2 topology-ring-3 topology-star topology-star-2 topology-star-3 topology-star-ring topology-star-ring-2 topology-star-ring-3 torii tornado tournament tower tower-off track tractor trademark traffic-cone traffic-cone-off traffic-lights traffic-lights-off train transaction-bitcoin transaction-dollar transaction-euro transaction-pound transaction-rupee transaction-yen transaction-yuan transfer transfer-in transfer-out transfer-vertical transform transform-point transform-point-bottom-left transform-point-bottom-right transform-point-top-left transform-point-top-right transition-bottom transition-left transition-right transition-top trash trash-off trash-x treadmill tree trees trekking trending-down trending-down-2 trending-down-3 trending-up trending-up-2 trending-up-3 trending-up-down triangle triangle-inverted triangle-minus triangle-minus-2 triangle-off triangle-plus triangle-plus-2 triangle-square-circle triangles trident trolley trophy trophy-off trowel truck truck-delivery truck-loading truck-off truck-return txt typeface typography typography-off u-turn-left u-turn-right ufo ufo-off uhd umbrella umbrella-2 umbrella-closed umbrella-closed-2 umbrella-off underline unicycle universe unlink upload urgent usb user user-bitcoin user-bolt user-cancel user-check user-circle user-code user-cog user-dollar user-down user-edit user-exclamation user-group user-heart user-hexagon user-key user-minus user-off user-pause user-pentagon user-pin user-plus user-question user-scan user-screen user-search user-share user-shield user-square user-square-rounded user-star user-up user-x users users-group users-minus users-plus uv-index ux-circle vaccine vaccine-bottle vaccine-bottle-off vaccine-off vacuum-cleaner variable variable-minus variable-off variable-plus vector vector-bezier vector-bezier-2 vector-bezier-arc vector-bezier-circle vector-off vector-spline vector-triangle vector-triangle-off venus versions versions-off video video-minus video-off video-plus view-360 view-360-arrow view-360-number view-360-off viewfinder viewfinder-off viewport-narrow viewport-short viewport-tall viewport-wide vignette vinyl vip vip-2 vip-off virus virus-off virus-search vocabulary vocabulary-off volcano volume volume-2 volume-3 volume-4 volume-off vs walk wall wall-off wallet wallet-off wallpaper wallpaper-off wand wand-off wash wash-dry wash-dry-1 wash-dry-2 wash-dry-3 wash-dry-a wash-dry-dip wash-dry-f wash-dry-flat wash-dry-hang wash-dry-off wash-dry-p wash-dry-shade wash-dry-w wash-dryclean wash-dryclean-off wash-eco wash-gentle wash-hand wash-machine wash-off wash-press wash-temperature-1 wash-temperature-2 wash-temperature-3 wash-temperature-4 wash-temperature-5 wash-temperature-6 wash-tumble-dry wash-tumble-off waterpolo wave-saw-tool wave-sine wave-square waves-electricity webhook webhook-off weight wheat wheat-off wheel wheelchair wheelchair-off whirl whisk wifi wifi-0 wifi-1 wifi-2 wifi-off wind wind-electricity wind-off windmill windmill-off window window-maximize window-minimize window-off windsock wiper wiper-wash woman wood world world-bolt world-cancel world-check world-code world-cog world-dollar world-down world-download world-exclamation world-heart world-latitude world-longitude world-map world-minus world-off world-pause world-pin world-plus world-question world-search world-share world-star world-up world-upload world-www world-x wrecking-ball writing writing-off writing-sign writing-sign-off x x-circle x-mark x-power-y xbox-a xbox-b xbox-x xbox-y xd xxx yin-yang yoga zeppelin zeppelin-off zero-config zip zodiac-aquarius zodiac-aries zodiac-cancer zodiac-capricorn zodiac-gemini zodiac-leo zodiac-libra zodiac-pisces zodiac-sagittarius zodiac-scorpio zodiac-taurus zodiac-virgo zoom zoom-cancel zoom-check zoom-code zoom-exclamation zoom-in zoom-in-area zoom-money zoom-out zoom-out-area zoom-pan zoom-question zoom-replace zoom-reset zoom-scan zzz zzz-off'.split(' '));
508
521
 
509
522
  // Canonical `lc-icon` name catalog + validation helpers (public API).
510
523
  const ICON_NAME_SET = new Set(ICON_NAMES);
@@ -533,6 +546,27 @@ const ICON_FALLBACK_SVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
533
546
  '<rect x="3.5" y="3.5" width="17" height="17" rx="3" stroke-dasharray="2.5 2.5" />' +
534
547
  '<text x="12" y="16.5" text-anchor="middle" font-size="12" font-weight="700" font-family="system-ui, -apple-system, sans-serif" fill="currentColor" stroke="none">?</text>' +
535
548
  '</svg>';
549
+ /**
550
+ * Icon names already reported to the console. A page with dozens of instances
551
+ * of the same typo must produce exactly one warning, not one per instance —
552
+ * and the warning fires in production too (unlike the old dev-only warning,
553
+ * which left prod incidents invisible in the console).
554
+ */
555
+ const warnedIconNames = new Set();
556
+ function warnOnce(name, message) {
557
+ if (warnedIconNames.has(name))
558
+ return;
559
+ warnedIconNames.add(name);
560
+ console.warn(message);
561
+ }
562
+ /**
563
+ * Clears the warn-once-per-name registry. Only needed by unit tests that
564
+ * assert on console warnings across multiple cases.
565
+ * @internal
566
+ */
567
+ function resetIconWarnings() {
568
+ warnedIconNames.clear();
569
+ }
536
570
  /**
537
571
  * Icon component - Tabler Icons wrapper for displaying SVG icons
538
572
  *
@@ -543,10 +577,15 @@ const ICON_FALLBACK_SVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
543
577
  * - Custom color support (CSS colors, variables)
544
578
  * - Accessibility attributes (ARIA labels, decorative icons)
545
579
  * - Dynamic SVG loading from Tabler Icons
546
- * - Fail-loud on unknown names: a dev-mode warning + a visible placeholder
547
- * (never a silent empty space). See {@link ICON_NAMES} / {@link isValidIconName}
548
- * for the canonical set of valid names, and {@link ICON_ALIASES} for the
549
- * supported Heroicon/Material aliases.
580
+ * - Fail-loud on unknown names: a console warning (once per name, in dev AND
581
+ * prod) + a visible placeholder (never a silent empty space) and **no
582
+ * network request**, because in SPA deployments the server answers missing
583
+ * asset paths with the index.html fallback. See {@link ICON_NAMES} /
584
+ * {@link isValidIconName} for the canonical set of valid names, and
585
+ * {@link ICON_ALIASES} for the supported Heroicon/Material aliases.
586
+ * - Fetched responses are validated (content-type + parsed `<svg>` root)
587
+ * before anything is trusted — a non-SVG response (e.g. the SPA index.html
588
+ * fallback) is dropped and replaced by the placeholder.
550
589
  *
551
590
  * @example
552
591
  * ```html
@@ -679,14 +718,18 @@ class IconComponent {
679
718
  return;
680
719
  }
681
720
  // Fail loud on names outside the canonical set (typos, un-aliased
682
- // Heroicon names, …). We still attempt to load below, so anything that
683
- // *is* servable keeps working this only surfaces the problem instead of
684
- // silently rendering an empty icon.
685
- if (!isValidIconName(rawName) && isDevMode()) {
686
- console.warn(`[lc-icon] Unknown icon "${rawName}". Use a Tabler name or a documented alias (see ICON_NAMES / ICON_ALIASES).`);
687
- if (this.strict()) {
721
+ // Heroicon names, …) in dev AND prod, once per name. Crucially, an
722
+ // unknown name is never fetched: in SPA deployments the server answers
723
+ // missing asset paths with the index.html fallback (status 200), so a
724
+ // fetch for a typo'd name would come back as a full HTML document. The
725
+ // placeholder is rendered instead.
726
+ if (!isValidIconName(rawName)) {
727
+ warnOnce(rawName, `[lc-icon] Unknown icon "${rawName}". Use a Tabler name or a documented alias (see ICON_NAMES / ICON_ALIASES). Rendering a placeholder instead.`);
728
+ if (isDevMode() && this.strict()) {
688
729
  throw new Error(`[lc-icon] Unknown icon "${rawName}" (strict mode). Use a Tabler name or a documented alias.`);
689
730
  }
731
+ this.renderFallback();
732
+ return;
690
733
  }
691
734
  // Resolve aliases (Heroicon/Material -> Tabler)
692
735
  const iconName = ICON_ALIASES[rawName] ?? rawName;
@@ -694,7 +737,12 @@ class IconComponent {
694
737
  const inlineSvg = INLINE_ICON_SVGS[iconName]?.[iconVariant];
695
738
  if (inlineSvg) {
696
739
  const processed = this.processSvgString(inlineSvg);
697
- this.svgContent.set(this.sanitizer.bypassSecurityTrustHtml(processed));
740
+ if (processed !== null) {
741
+ this.setTrustedSvg(processed);
742
+ }
743
+ else {
744
+ this.renderFallback();
745
+ }
698
746
  return;
699
747
  }
700
748
  // Fallback to HTTP loading (may not work in all environments)
@@ -709,7 +757,7 @@ class IconComponent {
709
757
  // otherwise-valid icon stuck on the placeholder. A genuine 404 (missing
710
758
  // asset) is not retried.
711
759
  this.http
712
- .get(path, { responseType: 'text' })
760
+ .get(path, { observe: 'response', responseType: 'text' })
713
761
  .pipe(retry({
714
762
  count: 2,
715
763
  delay: (error, retryCount) => error instanceof HttpErrorResponse && error.status === 404
@@ -717,10 +765,24 @@ class IconComponent {
717
765
  : timer(200 * retryCount),
718
766
  }))
719
767
  .subscribe({
720
- next: (svgText) => {
721
- // Process SVG to add our attributes
722
- const processed = this.processSvgString(svgText);
723
- this.svgContent.set(this.sanitizer.bypassSecurityTrustHtml(processed));
768
+ next: (response) => {
769
+ // Validate before anything touches the DOM: SPA deployments answer
770
+ // missing asset paths with `index.html` and status 200 — that
771
+ // document must be dropped, never injected. A text/html content-type
772
+ // is rejected outright; everything else must parse as a standalone
773
+ // <svg> document (see processSvgString).
774
+ const contentType = response.headers.get('content-type') ?? '';
775
+ const processed = contentType.includes('text/html')
776
+ ? null
777
+ : this.processSvgString(response.body ?? '');
778
+ if (processed === null) {
779
+ warnOnce(rawName, `[lc-icon] "${rawName}": ${path} returned non-SVG content` +
780
+ (contentType ? ` (${contentType})` : '') +
781
+ ' — dropped. In SPA deployments this is typically the index.html fallback for a missing asset.');
782
+ this.renderFallback();
783
+ return;
784
+ }
785
+ this.setTrustedSvg(processed);
724
786
  },
725
787
  error: () => {
726
788
  // Asset missing or unreachable: render a visible placeholder so the
@@ -728,23 +790,53 @@ class IconComponent {
728
790
  // already reported above; a known-but-unloadable name (e.g. offline,
729
791
  // SSR, or unit tests where assets are not served) stays quiet here to
730
792
  // avoid console noise.
731
- const processed = this.processSvgString(ICON_FALLBACK_SVG);
732
- this.svgContent.set(this.sanitizer.bypassSecurityTrustHtml(processed));
793
+ this.renderFallback();
733
794
  },
734
795
  });
735
796
  });
736
797
  }
737
798
  /**
738
- * Process SVG string to add size, color, and accessibility attributes
799
+ * The single funnel to `bypassSecurityTrustHtml`. The bypass is only safe
800
+ * because every caller passes the output of {@link processSvgString}, which
801
+ * guarantees the markup is a parsed and re-serialized standalone `<svg>`
802
+ * document — never raw fetched text. Do NOT add callers that skip that
803
+ * validation, and do NOT "simplify" the gates away: without them, a SPA
804
+ * server's index.html fallback (status 200, text/html) gets injected into
805
+ * the page once per icon instance.
806
+ * @private
807
+ */
808
+ setTrustedSvg(processedSvg) {
809
+ this.svgContent.set(this.sanitizer.bypassSecurityTrustHtml(processedSvg));
810
+ }
811
+ /**
812
+ * Renders the visible "?" placeholder for anything that cannot be resolved
813
+ * to a real icon (unknown name, failed load, non-SVG response).
814
+ * @private
815
+ */
816
+ renderFallback() {
817
+ this.setTrustedSvg(this.processSvgString(ICON_FALLBACK_SVG) ?? ICON_FALLBACK_SVG);
818
+ }
819
+ /**
820
+ * Parse an SVG string and add size, color, and accessibility attributes.
821
+ *
822
+ * Returns `null` when the input is not a standalone SVG document — a parse
823
+ * error, or a non-`<svg>` root such as an HTML page. Callers must treat
824
+ * `null` as "do not render"; the raw input is never passed through.
739
825
  * @private
740
826
  */
741
827
  processSvgString(svgText) {
742
828
  // Parse as DOM to manipulate
743
829
  const parser = new DOMParser();
744
830
  const doc = parser.parseFromString(svgText, 'image/svg+xml');
745
- const svg = doc.querySelector('svg');
746
- if (!svg)
747
- return svgText;
831
+ const svg = doc.documentElement;
832
+ // Reject anything that is not a clean, standalone <svg> document. On
833
+ // parse errors DOMParser yields a <parsererror> root (Firefox) or embeds
834
+ // a <parsererror> element in partially-parsed output (Chromium) — both
835
+ // must never reach the DOM.
836
+ if (svg.nodeName.toLowerCase() !== 'svg' ||
837
+ doc.getElementsByTagName('parsererror').length > 0) {
838
+ return null;
839
+ }
748
840
  // Set size
749
841
  const size = this.sizeInPixels();
750
842
  svg.setAttribute('width', size);
@@ -7129,7 +7221,7 @@ class SidenavComponent {
7129
7221
  }
7130
7222
  }
7131
7223
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: SidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7132
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: SidenavComponent, isStandalone: true, selector: "lc-sidenav", inputs: { collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, showLogo: { classPropertyName: "showLogo", publicName: "showLogo", isSignal: true, isRequired: false, transformFunction: null }, logoSrc: { classPropertyName: "logoSrc", publicName: "logoSrc", isSignal: true, isRequired: false, transformFunction: null }, logoEmblemSrc: { classPropertyName: "logoEmblemSrc", publicName: "logoEmblemSrc", isSignal: true, isRequired: false, transformFunction: null }, logoDarkSrc: { classPropertyName: "logoDarkSrc", publicName: "logoDarkSrc", isSignal: true, isRequired: false, transformFunction: null }, logoDarkEmblemSrc: { classPropertyName: "logoDarkEmblemSrc", publicName: "logoDarkEmblemSrc", isSignal: true, isRequired: false, transformFunction: null }, logoAlt: { classPropertyName: "logoAlt", publicName: "logoAlt", isSignal: true, isRequired: false, transformFunction: null }, logoSize: { classPropertyName: "logoSize", publicName: "logoSize", isSignal: true, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, mobileBreakpoint: { classPropertyName: "mobileBreakpoint", publicName: "mobileBreakpoint", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, hasOverlay: { classPropertyName: "hasOverlay", publicName: "hasOverlay", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, activeRoute: { classPropertyName: "activeRoute", publicName: "activeRoute", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange", closed: "closed", itemClicked: "itemClicked", itemAction: "itemAction" }, host: { listeners: { "document:keydown": "handleKeydown($event)" }, properties: { "class.lc-sidenav-container": "true", "class.lc-sidenav-container--docked": "effectiveMode() === 'docked'", "class.lc-sidenav-container--open": "isOpen()" } }, ngImport: i0, template: "<!-- Drawer mode: render with overlay and conditional visibility -->\n@if (effectiveMode() === 'drawer') {\n @if (isOpen()) {\n <!-- Overlay backdrop -->\n @if (hasOverlay()) {\n <div\n class=\"lc-sidenav__overlay\"\n (click)=\"handleClose()\"\n aria-hidden=\"true\">\n </div>\n }\n\n <ng-container *ngTemplateOutlet=\"sidenavPanel\" />\n }\n}\n\n<!-- Docked mode: always render, visibility controlled by CSS -->\n@if (effectiveMode() === 'docked') {\n <ng-container *ngTemplateOutlet=\"sidenavPanel\" />\n}\n\n<!-- Shared sidenav panel template -->\n<ng-template #sidenavPanel>\n <aside\n [class]=\"sidenavClasses()\"\n [ngStyle]=\"sidenavStyles()\"\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabel()\">\n\n <!-- Logo area (sidebar-first layout) -->\n @if (showLogo()) {\n <div\n class=\"lc-sidenav__logo\"\n [class.lc-sidenav__logo--size-xs]=\"logoSize() === 'xs'\"\n [class.lc-sidenav__logo--size-sm]=\"logoSize() === 'sm'\"\n [class.lc-sidenav__logo--size-md]=\"logoSize() === 'md'\"\n [class.lc-sidenav__logo--size-lg]=\"logoSize() === 'lg'\"\n [class.lc-sidenav__logo--size-xl]=\"logoSize() === 'xl'\"\n >\n <button type=\"button\" class=\"lc-sidenav__logo-link\" aria-label=\"Toggle sidebar\" (click)=\"toggleCollapsed()\">\n <lc-logo\n [variant]=\"collapsed() ? 'emblem' : 'full'\"\n [size]=\"collapsed() ? 'sm' : logoSize()\"\n [clickable]=\"false\"\n [colorMode]=\"theme() === 'dark' ? 'dark' : theme() === 'light' ? 'light' : 'auto'\"\n [src]=\"logoSrc()\"\n [emblemSrc]=\"logoEmblemSrc()\"\n [darkSrc]=\"logoDarkSrc()\"\n [darkEmblemSrc]=\"logoDarkEmblemSrc()\"\n [alt]=\"logoAlt() || 'Logo'\"\n />\n </button>\n @if (!collapsed() && effectiveMode() === 'docked') {\n <button\n type=\"button\"\n class=\"lc-sidenav__logo-toggle\"\n (click)=\"toggleCollapsed()\"\n [attr.aria-label]=\"position() === 'right' ? 'Collapse navigation to the right' : 'Collapse navigation to the left'\"\n title=\"Collapse sidebar\">\n <lc-icon\n [name]=\"position() === 'right' ? 'chevron-right' : 'chevron-left'\"\n size=\"sm\"\n [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n\n <!-- Close button (drawer mode only) -->\n @if (effectiveMode() === 'drawer') {\n <button\n type=\"button\"\n class=\"lc-sidenav__close\"\n (click)=\"handleClose()\"\n aria-label=\"Close navigation\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n\n <!-- Navigation items (if provided) -->\n @if (items().length > 0) {\n <nav class=\"lc-sidenav__nav\" [class.lc-sidenav__nav--docked]=\"effectiveMode() === 'docked'\">\n @for (item of sortedItems(); track item.id) {\n <!-- Section headline -->\n @if (item.isSection) {\n <div class=\"lc-sidenav__section\">\n <div class=\"lc-sidenav__section-header\">\n <h2 class=\"lc-sidenav__section-title\">{{ item.label }}</h2>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (item.children?.length) {\n <ul class=\"lc-sidenav__section-items\">\n @for (child of item.children; track child.id) {\n <li>\n @if (child.children?.length) {\n <!-- Section child with nested children (collapsible) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <button\n type=\"button\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--parent\"\n [class.lc-sidenav__nav-item--expanded]=\"isExpanded(child)\"\n [class.lc-sidenav__nav-item--has-active-child]=\"hasActiveChild(child)\"\n (click)=\"toggleExpanded(child)\"\n [attr.aria-expanded]=\"isExpanded(child)\"\n [title]=\"collapsed() ? child.label : ''\">\n @if (child.icon) {\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n <lc-icon name=\"chevron-down\" size=\"xs\" [decorative]=\"true\" class=\"lc-sidenav__nav-chevron\" />\n </button>\n @if (child.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"child.action.ariaLabel || child.label + ' action'\"\n (click)=\"handleItemAction($event, child)\">\n <lc-icon [name]=\"child.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (isExpanded(child)) {\n <div class=\"lc-sidenav__nav-children\">\n @for (grandchild of child.children; track grandchild.id) {\n <a\n [routerLink]=\"grandchild.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(grandchild)\"\n [attr.aria-current]=\"isItemActive(grandchild) ? 'page' : null\">\n @if (grandchild.icon) {\n <lc-icon [name]=\"grandchild.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ grandchild.label }}</span>\n @if (grandchild.badge) {\n <lc-badge [variant]=\"grandchild.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ grandchild.badge.value }}</lc-badge>\n }\n </a>\n }\n </div>\n }\n } @else {\n <!-- Section child (simple link) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <a\n [routerLink]=\"child.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n [routerLinkActiveOptions]=\"{ exact: child.route === '/' }\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(child)\"\n [attr.aria-current]=\"isItemActive(child) ? 'page' : null\"\n [title]=\"collapsed() ? child.label : ''\">\n @if (child.icon) {\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n </a>\n @if (child.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"child.action.ariaLabel || child.label + ' action'\"\n (click)=\"handleItemAction($event, child)\">\n <lc-icon [name]=\"child.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n </li>\n }\n </ul>\n }\n </div>\n } @else if (item.children?.length) {\n <!-- Parent item with children (collapsible group) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <button\n type=\"button\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--parent\"\n [class.lc-sidenav__nav-item--expanded]=\"isExpanded(item)\"\n [class.lc-sidenav__nav-item--has-active-child]=\"hasActiveChild(item)\"\n (click)=\"toggleExpanded(item)\"\n [attr.aria-expanded]=\"isExpanded(item)\"\n [title]=\"collapsed() ? item.label : ''\">\n <lc-icon [name]=\"item.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <lc-badge [variant]=\"item.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ item.badge.value }}</lc-badge>\n }\n <lc-icon name=\"chevron-down\" size=\"xs\" [decorative]=\"true\" class=\"lc-sidenav__nav-chevron\" />\n </button>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (isExpanded(item)) {\n <div class=\"lc-sidenav__nav-children\">\n @for (child of item.children; track child.id) {\n <a\n [routerLink]=\"child.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(child)\"\n [attr.aria-current]=\"isItemActive(child) ? 'page' : null\">\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n </a>\n }\n </div>\n }\n } @else {\n <!-- Simple item without children -->\n <div class=\"lc-sidenav__nav-item-row\">\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n [routerLinkActiveOptions]=\"{ exact: item.route === '/' }\"\n class=\"lc-sidenav__nav-item\"\n (click)=\"handleItemClick(item)\"\n [attr.aria-current]=\"isItemActive(item) ? 'page' : null\"\n [title]=\"collapsed() ? item.label : ''\">\n <lc-icon [name]=\"item.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <lc-badge [variant]=\"item.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ item.badge.value }}</lc-badge>\n }\n </a>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n }\n </nav>\n }\n\n <!-- Content projection (for custom content) -->\n <div class=\"lc-sidenav__content\" [class.lc-sidenav__content--docked]=\"mode() === 'docked'\">\n <ng-content></ng-content>\n </div>\n </aside>\n</ng-template>\n", styles: [".lc-sidenav-container{position:relative;z-index:1000}.lc-sidenav-container--docked{position:static;z-index:auto;height:100%}.lc-sidenav__overlay{position:fixed;inset:0;background-color:#00000080;opacity:0;animation:fadeIn .3s ease-out forwards;z-index:1000;cursor:pointer}@media(prefers-reduced-motion:reduce){.lc-sidenav__overlay{animation:none;opacity:1}}.lc-sidenav{--lc-sidenav-bg: var(--color-sidebar, var(--color-surface));--lc-sidenav-fg: var(--color-text-secondary);--lc-sidenav-fg-active: var(--color-text-primary);--lc-sidenav-border: var(--color-border);--lc-sidenav-hover-bg: var(--color-surface-hover);--lc-sidenav-section-fg: var(--color-text-tertiary);--lc-sidenav-active-bg: var(--color-surface-selected);--lc-sidenav-active-fg: var(--color-primary-500);--lc-sidenav-active-icon: var(--color-primary-500);position:fixed;top:0;bottom:0;background-color:var(--lc-sidenav-bg);box-shadow:var(--elevation-3, 0 10px 15px -3px rgba(0, 0, 0, .1));z-index:1001;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden}.lc-sidenav--left{left:0}.lc-sidenav--right{right:0}.lc-sidenav--drawer.lc-sidenav--left{animation:slideInLeft .3s ease-out}.lc-sidenav--drawer.lc-sidenav--right{animation:slideInRight .3s ease-out}@media(prefers-reduced-motion:reduce){.lc-sidenav--drawer{animation:none!important}}.lc-sidenav--docked{position:static;z-index:auto;height:100%;box-shadow:none;border-right:1px solid var(--lc-sidenav-border, #e5e7eb);transform:translate(0);transition:width .3s ease,transform .3s ease}.lc-sidenav--docked:not(.lc-sidenav--open){width:0!important;overflow:hidden;border-right:none}.lc-sidenav--collapsed{width:56px!important;overflow:visible}.lc-sidenav--collapsed .lc-sidenav__nav-label,.lc-sidenav--collapsed .lc-sidenav__nav-chevron,.lc-sidenav--collapsed .lc-sidenav__section-title,.lc-sidenav--collapsed .lc-sidenav__action-btn,.lc-sidenav--collapsed .lc-sidenav__section-header{display:none}.lc-sidenav--collapsed .lc-sidenav__nav{padding:.5rem;gap:.125rem}.lc-sidenav--collapsed .lc-sidenav__nav-item-row .lc-sidenav__action-btn{display:none}.lc-sidenav--collapsed .lc-sidenav__nav-item{justify-content:center;padding:.625rem;gap:0;border-radius:var(--border-radius-md, .375rem);position:relative}.lc-sidenav--collapsed .lc-sidenav__nav-item:hover:after{content:attr(title);position:absolute;left:100%;top:50%;transform:translateY(-50%);margin-left:8px;padding:4px 10px;background-color:var(--color-neutral-900, #111827);color:#fff;font-size:.75rem;white-space:nowrap;border-radius:4px;z-index:1002;pointer-events:none}.lc-sidenav--collapsed .lc-sidenav__nav-icon{width:22px;height:22px}.lc-sidenav--collapsed .lc-sidenav__nav-badge{position:absolute;top:2px;right:2px;margin-left:0;font-size:.625rem;min-width:0;padding:0 3px;line-height:1.2}.lc-sidenav--collapsed .lc-sidenav__nav-children{display:none}.lc-sidenav--collapsed .lc-sidenav__section-items{display:flex;flex-direction:column;gap:.125rem}.lc-sidenav--collapsed .lc-sidenav__section{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--color-divider, #e5e7eb)}.lc-sidenav--collapsed .lc-sidenav__content{display:none}.lc-sidenav--collapsed .lc-sidenav__logo{padding:0;justify-content:center}.lc-sidenav__logo{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-3);padding:0 var(--spacing-4);border-bottom:1px solid var(--lc-sidenav-border);min-height:64px;flex-shrink:0}.lc-sidenav__logo--size-xs,.lc-sidenav__logo--size-sm{min-height:56px}.lc-sidenav__logo--size-md{min-height:64px}.lc-sidenav__logo--size-lg{min-height:80px}.lc-sidenav__logo--size-xl{min-height:112px}.lc-sidenav__logo-link{display:flex;align-items:center;flex:0 1 auto;min-width:0;max-width:100%;text-decoration:none;color:var(--lc-sidenav-fg);background:transparent;border:none;padding:0;cursor:pointer}.lc-sidenav__logo-link:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:4px;border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__logo-toggle{display:inline-flex;align-items:center;justify-content:center;width:1.875rem;height:1.875rem;border:none;border-radius:var(--border-radius-md, .375rem);background:transparent;color:var(--lc-sidenav-fg);opacity:.8;flex-shrink:0;cursor:pointer;transition:background-color .2s ease,color .2s ease,opacity .2s ease}.lc-sidenav__logo-toggle:hover{background-color:var(--lc-sidenav-hover-bg);opacity:1}.lc-sidenav__logo-toggle:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px}.lc-sidenav__close{position:absolute;top:1rem;right:1rem;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;background:none;border:none;border-radius:var(--border-radius-md, .375rem);color:var(--color-text-secondary);cursor:pointer;transition:background-color .2s ease,color .2s ease;z-index:1}.lc-sidenav__close:hover{background-color:var(--color-surface);color:var(--color-text-primary)}.lc-sidenav__close:focus-visible{outline:2px solid var(--color-primary-500, rgb(59, 130, 246));outline-offset:2px}.lc-sidenav__close:active{background-color:var(--color-border)}.lc-sidenav__close svg{width:1.25rem;height:1.25rem}.lc-sidenav__nav{display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem));padding:var(--lc-density-padding-md, 1rem);padding-top:4rem}.lc-sidenav__nav--docked{padding-top:var(--lc-density-padding-md, 1rem);gap:0}.lc-sidenav__section:not(:first-child){margin-top:var(--spacing-4, 1rem);padding-top:var(--spacing-3, .75rem)}.lc-sidenav__section-header{display:flex;align-items:center;justify-content:space-between;padding-right:0;margin-bottom:var(--spacing-1, .25rem)}.lc-sidenav__section-title{padding:0 var(--spacing-3, .75rem);margin-bottom:0;font-size:var(--font-size-xs, .75rem);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--lc-sidenav-section-fg);line-height:28px}.lc-sidenav__section-items{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem))}.lc-sidenav__nav-item{display:flex;align-items:center;gap:var(--spacing-3, .75rem);padding:var(--lc-density-padding-xs, var(--spacing-2, .5rem)) var(--spacing-3, .75rem);text-decoration:none;color:var(--lc-sidenav-fg);border-radius:var(--border-radius-md, .375rem);transition:background-color .2s ease,color .2s ease;font-size:var(--font-size-sm, .875rem);font-weight:500;cursor:pointer}.lc-sidenav__nav-item:hover{background-color:var(--lc-sidenav-hover-bg);color:var(--lc-sidenav-fg-active)}.lc-sidenav__nav-item:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px}.lc-sidenav__nav-item--active{background-color:var(--lc-sidenav-active-bg);color:var(--lc-sidenav-active-fg);font-weight:600;box-shadow:inset 2px 0 0 var(--color-primary-500)}.lc-sidenav__nav-item--active .lc-sidenav__nav-icon{color:var(--lc-sidenav-active-icon)}.lc-sidenav__nav-item--active:hover{background-color:var(--lc-sidenav-active-bg);color:var(--lc-sidenav-active-fg)}.lc-sidenav__nav-item--has-active-child{color:var(--lc-sidenav-fg-active);font-weight:600}.lc-sidenav__nav-item--has-active-child .lc-sidenav__nav-icon{color:var(--lc-sidenav-fg-active)}.lc-sidenav__nav-icon{width:20px;height:20px;flex-shrink:0;color:currentColor}.lc-sidenav__nav-chevron{width:16px;height:16px;flex-shrink:0;margin-left:auto;transition:transform .2s ease}.lc-sidenav__nav-badge{flex-shrink:0;margin-left:auto}.lc-sidenav__nav-item--expanded .lc-sidenav__nav-chevron{transform:rotate(180deg)}.lc-sidenav__nav-item--parent{width:100%;border:none;background:none;font-family:inherit;text-align:left}.lc-sidenav__nav-children{display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem));padding-left:var(--spacing-4, 1rem)}.lc-sidenav__nav-item--child{font-size:var(--font-size-sm, .875rem)}.lc-sidenav__nav-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lc-sidenav__nav-item-row{display:flex;align-items:center}.lc-sidenav__nav-item-row .lc-sidenav__nav-item{flex:1;min-width:0}.lc-sidenav__nav-item-row .lc-sidenav__action-btn{opacity:0;transition:opacity .15s ease}.lc-sidenav__nav-item-row:hover .lc-sidenav__action-btn{opacity:1}.lc-sidenav__action-btn{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:28px;height:28px;padding:0;background:transparent;border:none;border-radius:var(--border-radius-sm, .25rem);color:var(--lc-sidenav-section-fg);cursor:pointer;transition:background-color .15s ease,color .15s ease}.lc-sidenav__action-btn:hover{background-color:var(--lc-sidenav-hover-bg);color:var(--lc-sidenav-fg-active)}.lc-sidenav__action-btn:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px;opacity:1}.lc-sidenav__content{flex:1;padding:4rem 1rem 1rem;overflow-y:auto;-webkit-overflow-scrolling:touch}.lc-sidenav__content--docked{padding-top:1rem}.lc-sidenav__content::-webkit-scrollbar{width:.5rem}.lc-sidenav__content::-webkit-scrollbar-track{background:var(--color-surface);border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__content::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__content::-webkit-scrollbar-thumb:hover{background:var(--color-surface-hover)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInLeft{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}@media(max-width:640px){.lc-sidenav--drawer{width:100%!important;max-width:320px}}@media(max-width:480px){.lc-sidenav--drawer{max-width:280px}}.lc-sidenav__content:focus{outline:none}.lc-sidenav__content a:focus-visible,.lc-sidenav__content button:focus-visible{outline:2px solid var(--color-primary-500, rgb(59, 130, 246));outline-offset:2px;border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav--light{--lc-sidenav-bg: #ffffff;--lc-sidenav-fg: #374151;--lc-sidenav-fg-active: #111827;--lc-sidenav-border: #e5e7eb;--lc-sidenav-hover-bg: #f3f4f6;--lc-sidenav-section-fg: #6b7280;--lc-sidenav-active-bg: #f0f8fa;--lc-sidenav-active-fg: #144f5b;--lc-sidenav-active-icon: #1a6a79}.lc-sidenav--dark{--lc-sidenav-bg: var(--color-sidebar, var(--color-surface));--lc-sidenav-fg: var(--color-text-secondary);--lc-sidenav-fg-active: var(--color-text-primary);--lc-sidenav-border: var(--color-border);--lc-sidenav-hover-bg: var(--color-surface-hover);--lc-sidenav-section-fg: var(--color-text-tertiary);--lc-sidenav-active-bg: var(--color-surface-selected);--lc-sidenav-active-fg: var(--color-primary-500);--lc-sidenav-active-icon: var(--color-primary-500)}@media print{.lc-sidenav-container,.lc-sidenav__overlay,.lc-sidenav{display:none}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: IconComponent, selector: "lc-icon", inputs: ["name", "variant", "size", "color", "ariaLabel", "decorative", "strict"] }, { kind: "component", type: BadgeComponent, selector: "lc-badge", inputs: ["variant", "size", "rounded", "dot"] }, { kind: "component", type: LogoComponent, selector: "lc-logo", inputs: ["variant", "size", "alt", "clickable", "colorMode", "src", "emblemSrc", "darkSrc", "darkEmblemSrc"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7224
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: SidenavComponent, isStandalone: true, selector: "lc-sidenav", inputs: { collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, showLogo: { classPropertyName: "showLogo", publicName: "showLogo", isSignal: true, isRequired: false, transformFunction: null }, logoSrc: { classPropertyName: "logoSrc", publicName: "logoSrc", isSignal: true, isRequired: false, transformFunction: null }, logoEmblemSrc: { classPropertyName: "logoEmblemSrc", publicName: "logoEmblemSrc", isSignal: true, isRequired: false, transformFunction: null }, logoDarkSrc: { classPropertyName: "logoDarkSrc", publicName: "logoDarkSrc", isSignal: true, isRequired: false, transformFunction: null }, logoDarkEmblemSrc: { classPropertyName: "logoDarkEmblemSrc", publicName: "logoDarkEmblemSrc", isSignal: true, isRequired: false, transformFunction: null }, logoAlt: { classPropertyName: "logoAlt", publicName: "logoAlt", isSignal: true, isRequired: false, transformFunction: null }, logoSize: { classPropertyName: "logoSize", publicName: "logoSize", isSignal: true, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, mobileBreakpoint: { classPropertyName: "mobileBreakpoint", publicName: "mobileBreakpoint", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, hasOverlay: { classPropertyName: "hasOverlay", publicName: "hasOverlay", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, activeRoute: { classPropertyName: "activeRoute", publicName: "activeRoute", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange", closed: "closed", itemClicked: "itemClicked", itemAction: "itemAction" }, host: { listeners: { "document:keydown": "handleKeydown($event)" }, properties: { "class.lc-sidenav-container": "true", "class.lc-sidenav-container--docked": "effectiveMode() === 'docked'", "class.lc-sidenav-container--open": "isOpen()" } }, ngImport: i0, template: "<!-- Drawer mode: render with overlay and conditional visibility -->\n@if (effectiveMode() === 'drawer') {\n @if (isOpen()) {\n <!-- Overlay backdrop -->\n @if (hasOverlay()) {\n <div\n class=\"lc-sidenav__overlay\"\n (click)=\"handleClose()\"\n aria-hidden=\"true\">\n </div>\n }\n\n <ng-container *ngTemplateOutlet=\"sidenavPanel\" />\n }\n}\n\n<!-- Docked mode: always render, visibility controlled by CSS -->\n@if (effectiveMode() === 'docked') {\n <ng-container *ngTemplateOutlet=\"sidenavPanel\" />\n}\n\n<!-- Shared sidenav panel template -->\n<ng-template #sidenavPanel>\n <aside\n [class]=\"sidenavClasses()\"\n [ngStyle]=\"sidenavStyles()\"\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabel()\">\n\n <!-- Logo area (sidebar-first layout) -->\n @if (showLogo()) {\n <div\n class=\"lc-sidenav__logo\"\n [class.lc-sidenav__logo--size-xs]=\"logoSize() === 'xs'\"\n [class.lc-sidenav__logo--size-sm]=\"logoSize() === 'sm'\"\n [class.lc-sidenav__logo--size-md]=\"logoSize() === 'md'\"\n [class.lc-sidenav__logo--size-lg]=\"logoSize() === 'lg'\"\n [class.lc-sidenav__logo--size-xl]=\"logoSize() === 'xl'\"\n >\n <button type=\"button\" class=\"lc-sidenav__logo-link\" aria-label=\"Toggle sidebar\" (click)=\"toggleCollapsed()\">\n <lc-logo\n [variant]=\"collapsed() ? 'emblem' : 'full'\"\n [size]=\"collapsed() ? 'sm' : logoSize()\"\n [clickable]=\"false\"\n [colorMode]=\"theme() === 'dark' ? 'dark' : theme() === 'light' ? 'light' : 'auto'\"\n [src]=\"logoSrc()\"\n [emblemSrc]=\"logoEmblemSrc()\"\n [darkSrc]=\"logoDarkSrc()\"\n [darkEmblemSrc]=\"logoDarkEmblemSrc()\"\n [alt]=\"logoAlt() || 'Logo'\"\n />\n </button>\n @if (!collapsed() && effectiveMode() === 'docked') {\n <button\n type=\"button\"\n class=\"lc-sidenav__logo-toggle\"\n (click)=\"toggleCollapsed()\"\n [attr.aria-label]=\"position() === 'right' ? 'Collapse navigation to the right' : 'Collapse navigation to the left'\"\n title=\"Collapse sidebar\">\n <lc-icon\n [name]=\"position() === 'right' ? 'chevron-right' : 'chevron-left'\"\n size=\"sm\"\n [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n\n <!-- Close button (drawer mode only) -->\n @if (effectiveMode() === 'drawer') {\n <button\n type=\"button\"\n class=\"lc-sidenav__close\"\n (click)=\"handleClose()\"\n aria-label=\"Close navigation\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n\n <!-- Navigation items (if provided) -->\n @if (items().length > 0) {\n <nav class=\"lc-sidenav__nav\" [class.lc-sidenav__nav--docked]=\"effectiveMode() === 'docked'\">\n @for (item of sortedItems(); track item.id) {\n <!-- Section headline -->\n @if (item.isSection) {\n <div class=\"lc-sidenav__section\">\n <div class=\"lc-sidenav__section-header\">\n <h2 class=\"lc-sidenav__section-title\">{{ item.label }}</h2>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (item.children?.length) {\n <ul class=\"lc-sidenav__section-items\">\n @for (child of item.children; track child.id) {\n <li>\n @if (child.children?.length) {\n <!-- Section child with nested children (collapsible) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <button\n type=\"button\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--parent\"\n [class.lc-sidenav__nav-item--expanded]=\"isExpanded(child)\"\n [class.lc-sidenav__nav-item--has-active-child]=\"hasActiveChild(child)\"\n (click)=\"toggleExpanded(child)\"\n [attr.aria-expanded]=\"isExpanded(child)\"\n [title]=\"collapsed() ? child.label : ''\">\n @if (child.icon) {\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n <lc-icon name=\"chevron-down\" size=\"xs\" [decorative]=\"true\" class=\"lc-sidenav__nav-chevron\" />\n </button>\n @if (child.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"child.action.ariaLabel || child.label + ' action'\"\n (click)=\"handleItemAction($event, child)\">\n <lc-icon [name]=\"child.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (isExpanded(child)) {\n <div class=\"lc-sidenav__nav-children\">\n @for (grandchild of child.children; track grandchild.id) {\n <a\n [routerLink]=\"grandchild.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(grandchild)\"\n [attr.aria-current]=\"isItemActive(grandchild) ? 'page' : null\">\n @if (grandchild.icon) {\n <lc-icon [name]=\"grandchild.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ grandchild.label }}</span>\n @if (grandchild.badge) {\n <lc-badge [variant]=\"grandchild.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ grandchild.badge.value }}</lc-badge>\n }\n </a>\n }\n </div>\n }\n } @else {\n <!-- Section child (simple link) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <a\n [routerLink]=\"child.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n [routerLinkActiveOptions]=\"{ exact: child.route === '/' }\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(child)\"\n [attr.aria-current]=\"isItemActive(child) ? 'page' : null\"\n [title]=\"collapsed() ? child.label : ''\">\n @if (child.icon) {\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n </a>\n @if (child.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"child.action.ariaLabel || child.label + ' action'\"\n (click)=\"handleItemAction($event, child)\">\n <lc-icon [name]=\"child.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n </li>\n }\n </ul>\n }\n </div>\n } @else if (item.children?.length) {\n <!-- Parent item with children (collapsible group) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <button\n type=\"button\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--parent\"\n [class.lc-sidenav__nav-item--expanded]=\"isExpanded(item)\"\n [class.lc-sidenav__nav-item--has-active-child]=\"hasActiveChild(item)\"\n (click)=\"toggleExpanded(item)\"\n [attr.aria-expanded]=\"isExpanded(item)\"\n [title]=\"collapsed() ? item.label : ''\">\n <lc-icon [name]=\"item.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <lc-badge [variant]=\"item.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ item.badge.value }}</lc-badge>\n }\n <lc-icon name=\"chevron-down\" size=\"xs\" [decorative]=\"true\" class=\"lc-sidenav__nav-chevron\" />\n </button>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (isExpanded(item)) {\n <div class=\"lc-sidenav__nav-children\">\n @for (child of item.children; track child.id) {\n <a\n [routerLink]=\"child.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(child)\"\n [attr.aria-current]=\"isItemActive(child) ? 'page' : null\">\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n </a>\n }\n </div>\n }\n } @else {\n <!-- Simple item without children -->\n <div class=\"lc-sidenav__nav-item-row\">\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n [routerLinkActiveOptions]=\"{ exact: item.route === '/' }\"\n class=\"lc-sidenav__nav-item\"\n (click)=\"handleItemClick(item)\"\n [attr.aria-current]=\"isItemActive(item) ? 'page' : null\"\n [title]=\"collapsed() ? item.label : ''\">\n <lc-icon [name]=\"item.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <lc-badge [variant]=\"item.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ item.badge.value }}</lc-badge>\n }\n </a>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n }\n </nav>\n }\n\n <!-- Content projection (for custom content) -->\n <div class=\"lc-sidenav__content\" [class.lc-sidenav__content--docked]=\"mode() === 'docked'\">\n <ng-content></ng-content>\n </div>\n </aside>\n</ng-template>\n", styles: [".lc-sidenav-container{position:relative;z-index:1000}.lc-sidenav-container--docked{position:static;z-index:auto;height:100%}.lc-sidenav__overlay{position:fixed;inset:0;background-color:#00000080;opacity:0;animation:fadeIn .3s ease-out forwards;z-index:1000;cursor:pointer}@media(prefers-reduced-motion:reduce){.lc-sidenav__overlay{animation:none;opacity:1}}.lc-sidenav{--lc-sidenav-bg: var(--color-sidebar, var(--color-surface));--lc-sidenav-fg: var(--color-text-secondary);--lc-sidenav-fg-active: var(--color-text-primary);--lc-sidenav-border: var(--color-border);--lc-sidenav-hover-bg: var(--color-surface-hover);--lc-sidenav-section-fg: var(--color-text-tertiary);--lc-sidenav-active-bg: var(--color-surface-selected);--lc-sidenav-active-fg: var(--color-primary-500);--lc-sidenav-active-icon: var(--color-primary-500);--lc-sidenav-badge-ring: var(--lc-sidenav-bg);position:fixed;top:0;bottom:0;background-color:var(--lc-sidenav-bg);box-shadow:var(--elevation-3, 0 10px 15px -3px rgba(0, 0, 0, .1));z-index:1001;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden}.lc-sidenav--left{left:0}.lc-sidenav--right{right:0}.lc-sidenav--drawer.lc-sidenav--left{animation:slideInLeft .3s ease-out}.lc-sidenav--drawer.lc-sidenav--right{animation:slideInRight .3s ease-out}@media(prefers-reduced-motion:reduce){.lc-sidenav--drawer{animation:none!important}}.lc-sidenav--docked{position:static;z-index:auto;height:100%;box-shadow:none;border-right:1px solid var(--lc-sidenav-border, #e5e7eb);transform:translate(0);transition:width .3s ease,transform .3s ease}.lc-sidenav--docked:not(.lc-sidenav--open){width:0!important;overflow:hidden;border-right:none}.lc-sidenav--collapsed{width:56px!important;overflow:visible}.lc-sidenav--collapsed .lc-sidenav__nav-label,.lc-sidenav--collapsed .lc-sidenav__nav-chevron,.lc-sidenav--collapsed .lc-sidenav__section-title,.lc-sidenav--collapsed .lc-sidenav__action-btn,.lc-sidenav--collapsed .lc-sidenav__section-header{display:none}.lc-sidenav--collapsed .lc-sidenav__nav{padding:.5rem;gap:.125rem}.lc-sidenav--collapsed .lc-sidenav__nav-item-row .lc-sidenav__action-btn{display:none}.lc-sidenav--collapsed .lc-sidenav__nav-item{justify-content:center;padding:.625rem;gap:0;border-radius:var(--border-radius-md, .375rem);position:relative}.lc-sidenav--collapsed .lc-sidenav__nav-item:hover:after{content:attr(title);position:absolute;left:100%;top:50%;transform:translateY(-50%);margin-left:8px;padding:4px 10px;background-color:var(--color-neutral-900, #111827);color:#fff;font-size:.75rem;white-space:nowrap;border-radius:4px;z-index:1002;pointer-events:none}.lc-sidenav--collapsed .lc-sidenav__nav-icon{width:22px;height:22px}.lc-sidenav--collapsed .lc-sidenav__nav-badge{position:absolute;top:0;right:0;transform:translate(4px,-4px);margin-left:0;border-radius:var(--border-radius-full, 9999px);background-color:var(--lc-sidenav-badge-ring);box-shadow:0 0 0 2px var(--lc-sidenav-badge-ring);pointer-events:none}.lc-sidenav--collapsed .lc-sidenav__nav-children{display:none}.lc-sidenav--collapsed .lc-sidenav__section-items{display:flex;flex-direction:column;gap:.125rem}.lc-sidenav--collapsed .lc-sidenav__section{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--color-divider, #e5e7eb)}.lc-sidenav--collapsed .lc-sidenav__content{display:none}.lc-sidenav--collapsed .lc-sidenav__logo{padding:0;justify-content:center}.lc-sidenav__logo{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-3);padding:0 var(--spacing-4);border-bottom:1px solid var(--lc-sidenav-border);min-height:64px;flex-shrink:0}.lc-sidenav__logo--size-xs,.lc-sidenav__logo--size-sm{min-height:56px}.lc-sidenav__logo--size-md{min-height:64px}.lc-sidenav__logo--size-lg{min-height:80px}.lc-sidenav__logo--size-xl{min-height:112px}.lc-sidenav__logo-link{display:flex;align-items:center;flex:0 1 auto;min-width:0;max-width:100%;text-decoration:none;color:var(--lc-sidenav-fg);background:transparent;border:none;padding:0;cursor:pointer}.lc-sidenav__logo-link:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:4px;border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__logo-toggle{display:inline-flex;align-items:center;justify-content:center;width:1.875rem;height:1.875rem;border:none;border-radius:var(--border-radius-md, .375rem);background:transparent;color:var(--lc-sidenav-fg);opacity:.8;flex-shrink:0;cursor:pointer;transition:background-color .2s ease,color .2s ease,opacity .2s ease}.lc-sidenav__logo-toggle:hover{background-color:var(--lc-sidenav-hover-bg);opacity:1}.lc-sidenav__logo-toggle:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px}.lc-sidenav__close{position:absolute;top:1rem;right:1rem;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;background:none;border:none;border-radius:var(--border-radius-md, .375rem);color:var(--color-text-secondary);cursor:pointer;transition:background-color .2s ease,color .2s ease;z-index:1}.lc-sidenav__close:hover{background-color:var(--color-surface);color:var(--color-text-primary)}.lc-sidenav__close:focus-visible{outline:2px solid var(--color-primary-500, rgb(59, 130, 246));outline-offset:2px}.lc-sidenav__close:active{background-color:var(--color-border)}.lc-sidenav__close svg{width:1.25rem;height:1.25rem}.lc-sidenav__nav{display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem));padding:var(--lc-density-padding-md, 1rem);padding-top:4rem}.lc-sidenav__nav--docked{padding-top:var(--lc-density-padding-md, 1rem);gap:0}.lc-sidenav__section:not(:first-child){margin-top:var(--spacing-4, 1rem);padding-top:var(--spacing-3, .75rem)}.lc-sidenav__section-header{display:flex;align-items:center;justify-content:space-between;padding-right:0;margin-bottom:var(--spacing-1, .25rem)}.lc-sidenav__section-title{padding:0 var(--spacing-3, .75rem);margin-bottom:0;font-size:var(--font-size-xs, .75rem);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--lc-sidenav-section-fg);line-height:28px}.lc-sidenav__section-items{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem))}.lc-sidenav__nav-item{display:flex;align-items:center;gap:var(--spacing-3, .75rem);padding:var(--lc-density-padding-xs, var(--spacing-2, .5rem)) var(--spacing-3, .75rem);text-decoration:none;color:var(--lc-sidenav-fg);border-radius:var(--border-radius-md, .375rem);transition:background-color .2s ease,color .2s ease;font-size:var(--font-size-sm, .875rem);font-weight:500;cursor:pointer}.lc-sidenav__nav-item:hover{background-color:var(--lc-sidenav-hover-bg);color:var(--lc-sidenav-fg-active)}.lc-sidenav__nav-item:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px}.lc-sidenav__nav-item--active{background-color:var(--lc-sidenav-active-bg);color:var(--lc-sidenav-active-fg);font-weight:600;box-shadow:inset 2px 0 0 var(--color-primary-500)}.lc-sidenav__nav-item--active .lc-sidenav__nav-icon{color:var(--lc-sidenav-active-icon)}.lc-sidenav__nav-item--active:hover{background-color:var(--lc-sidenav-active-bg);color:var(--lc-sidenav-active-fg)}.lc-sidenav__nav-item--has-active-child{color:var(--lc-sidenav-fg-active);font-weight:600}.lc-sidenav__nav-item--has-active-child .lc-sidenav__nav-icon{color:var(--lc-sidenav-fg-active)}.lc-sidenav__nav-icon{width:20px;height:20px;flex-shrink:0;color:currentColor}.lc-sidenav__nav-chevron{width:16px;height:16px;flex-shrink:0;margin-left:auto;transition:transform .2s ease}.lc-sidenav__nav-badge{flex-shrink:0;margin-left:auto}:host ::ng-deep .lc-sidenav--collapsed .lc-sidenav__nav-badge .lc-badge{min-width:16px;height:16px;padding:0 4px;font-size:10px;font-weight:600;line-height:1}.lc-sidenav__nav-item--expanded .lc-sidenav__nav-chevron{transform:rotate(180deg)}.lc-sidenav__nav-item--parent{width:100%;border:none;background:none;font-family:inherit;text-align:left}.lc-sidenav__nav-children{display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem));padding-left:var(--spacing-4, 1rem)}.lc-sidenav__nav-item--child{font-size:var(--font-size-sm, .875rem)}.lc-sidenav__nav-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lc-sidenav__nav-item-row{display:flex;align-items:center}.lc-sidenav__nav-item-row .lc-sidenav__nav-item{flex:1;min-width:0}.lc-sidenav__nav-item-row .lc-sidenav__action-btn{opacity:0;transition:opacity .15s ease}.lc-sidenav__nav-item-row:hover .lc-sidenav__action-btn{opacity:1}.lc-sidenav__action-btn{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:28px;height:28px;padding:0;background:transparent;border:none;border-radius:var(--border-radius-sm, .25rem);color:var(--lc-sidenav-section-fg);cursor:pointer;transition:background-color .15s ease,color .15s ease}.lc-sidenav__action-btn:hover{background-color:var(--lc-sidenav-hover-bg);color:var(--lc-sidenav-fg-active)}.lc-sidenav__action-btn:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px;opacity:1}.lc-sidenav__content{flex:1;padding:4rem 1rem 1rem;overflow-y:auto;-webkit-overflow-scrolling:touch}.lc-sidenav__content--docked{padding-top:1rem}.lc-sidenav__content::-webkit-scrollbar{width:.5rem}.lc-sidenav__content::-webkit-scrollbar-track{background:var(--color-surface);border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__content::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__content::-webkit-scrollbar-thumb:hover{background:var(--color-surface-hover)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInLeft{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}@media(max-width:640px){.lc-sidenav--drawer{width:100%!important;max-width:320px}}@media(max-width:480px){.lc-sidenav--drawer{max-width:280px}}.lc-sidenav__content:focus{outline:none}.lc-sidenav__content a:focus-visible,.lc-sidenav__content button:focus-visible{outline:2px solid var(--color-primary-500, rgb(59, 130, 246));outline-offset:2px;border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav--light{--lc-sidenav-bg: #ffffff;--lc-sidenav-fg: #374151;--lc-sidenav-fg-active: #111827;--lc-sidenav-border: #e5e7eb;--lc-sidenav-hover-bg: #f3f4f6;--lc-sidenav-section-fg: #6b7280;--lc-sidenav-active-bg: #f0f8fa;--lc-sidenav-active-fg: #144f5b;--lc-sidenav-active-icon: #1a6a79}.lc-sidenav--dark{--lc-sidenav-bg: var(--color-sidebar, var(--color-surface));--lc-sidenav-fg: var(--color-text-secondary);--lc-sidenav-fg-active: var(--color-text-primary);--lc-sidenav-border: var(--color-border);--lc-sidenav-hover-bg: var(--color-surface-hover);--lc-sidenav-section-fg: var(--color-text-tertiary);--lc-sidenav-active-bg: var(--color-surface-selected);--lc-sidenav-active-fg: var(--color-primary-500);--lc-sidenav-active-icon: var(--color-primary-500)}@media print{.lc-sidenav-container,.lc-sidenav__overlay,.lc-sidenav{display:none}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: IconComponent, selector: "lc-icon", inputs: ["name", "variant", "size", "color", "ariaLabel", "decorative", "strict"] }, { kind: "component", type: BadgeComponent, selector: "lc-badge", inputs: ["variant", "size", "rounded", "dot"] }, { kind: "component", type: LogoComponent, selector: "lc-logo", inputs: ["variant", "size", "alt", "clickable", "colorMode", "src", "emblemSrc", "darkSrc", "darkEmblemSrc"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7133
7225
  }
7134
7226
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: SidenavComponent, decorators: [{
7135
7227
  type: Component,
@@ -7137,7 +7229,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImpo
7137
7229
  '[class.lc-sidenav-container]': 'true',
7138
7230
  '[class.lc-sidenav-container--docked]': "effectiveMode() === 'docked'",
7139
7231
  '[class.lc-sidenav-container--open]': 'isOpen()',
7140
- }, template: "<!-- Drawer mode: render with overlay and conditional visibility -->\n@if (effectiveMode() === 'drawer') {\n @if (isOpen()) {\n <!-- Overlay backdrop -->\n @if (hasOverlay()) {\n <div\n class=\"lc-sidenav__overlay\"\n (click)=\"handleClose()\"\n aria-hidden=\"true\">\n </div>\n }\n\n <ng-container *ngTemplateOutlet=\"sidenavPanel\" />\n }\n}\n\n<!-- Docked mode: always render, visibility controlled by CSS -->\n@if (effectiveMode() === 'docked') {\n <ng-container *ngTemplateOutlet=\"sidenavPanel\" />\n}\n\n<!-- Shared sidenav panel template -->\n<ng-template #sidenavPanel>\n <aside\n [class]=\"sidenavClasses()\"\n [ngStyle]=\"sidenavStyles()\"\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabel()\">\n\n <!-- Logo area (sidebar-first layout) -->\n @if (showLogo()) {\n <div\n class=\"lc-sidenav__logo\"\n [class.lc-sidenav__logo--size-xs]=\"logoSize() === 'xs'\"\n [class.lc-sidenav__logo--size-sm]=\"logoSize() === 'sm'\"\n [class.lc-sidenav__logo--size-md]=\"logoSize() === 'md'\"\n [class.lc-sidenav__logo--size-lg]=\"logoSize() === 'lg'\"\n [class.lc-sidenav__logo--size-xl]=\"logoSize() === 'xl'\"\n >\n <button type=\"button\" class=\"lc-sidenav__logo-link\" aria-label=\"Toggle sidebar\" (click)=\"toggleCollapsed()\">\n <lc-logo\n [variant]=\"collapsed() ? 'emblem' : 'full'\"\n [size]=\"collapsed() ? 'sm' : logoSize()\"\n [clickable]=\"false\"\n [colorMode]=\"theme() === 'dark' ? 'dark' : theme() === 'light' ? 'light' : 'auto'\"\n [src]=\"logoSrc()\"\n [emblemSrc]=\"logoEmblemSrc()\"\n [darkSrc]=\"logoDarkSrc()\"\n [darkEmblemSrc]=\"logoDarkEmblemSrc()\"\n [alt]=\"logoAlt() || 'Logo'\"\n />\n </button>\n @if (!collapsed() && effectiveMode() === 'docked') {\n <button\n type=\"button\"\n class=\"lc-sidenav__logo-toggle\"\n (click)=\"toggleCollapsed()\"\n [attr.aria-label]=\"position() === 'right' ? 'Collapse navigation to the right' : 'Collapse navigation to the left'\"\n title=\"Collapse sidebar\">\n <lc-icon\n [name]=\"position() === 'right' ? 'chevron-right' : 'chevron-left'\"\n size=\"sm\"\n [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n\n <!-- Close button (drawer mode only) -->\n @if (effectiveMode() === 'drawer') {\n <button\n type=\"button\"\n class=\"lc-sidenav__close\"\n (click)=\"handleClose()\"\n aria-label=\"Close navigation\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n\n <!-- Navigation items (if provided) -->\n @if (items().length > 0) {\n <nav class=\"lc-sidenav__nav\" [class.lc-sidenav__nav--docked]=\"effectiveMode() === 'docked'\">\n @for (item of sortedItems(); track item.id) {\n <!-- Section headline -->\n @if (item.isSection) {\n <div class=\"lc-sidenav__section\">\n <div class=\"lc-sidenav__section-header\">\n <h2 class=\"lc-sidenav__section-title\">{{ item.label }}</h2>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (item.children?.length) {\n <ul class=\"lc-sidenav__section-items\">\n @for (child of item.children; track child.id) {\n <li>\n @if (child.children?.length) {\n <!-- Section child with nested children (collapsible) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <button\n type=\"button\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--parent\"\n [class.lc-sidenav__nav-item--expanded]=\"isExpanded(child)\"\n [class.lc-sidenav__nav-item--has-active-child]=\"hasActiveChild(child)\"\n (click)=\"toggleExpanded(child)\"\n [attr.aria-expanded]=\"isExpanded(child)\"\n [title]=\"collapsed() ? child.label : ''\">\n @if (child.icon) {\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n <lc-icon name=\"chevron-down\" size=\"xs\" [decorative]=\"true\" class=\"lc-sidenav__nav-chevron\" />\n </button>\n @if (child.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"child.action.ariaLabel || child.label + ' action'\"\n (click)=\"handleItemAction($event, child)\">\n <lc-icon [name]=\"child.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (isExpanded(child)) {\n <div class=\"lc-sidenav__nav-children\">\n @for (grandchild of child.children; track grandchild.id) {\n <a\n [routerLink]=\"grandchild.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(grandchild)\"\n [attr.aria-current]=\"isItemActive(grandchild) ? 'page' : null\">\n @if (grandchild.icon) {\n <lc-icon [name]=\"grandchild.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ grandchild.label }}</span>\n @if (grandchild.badge) {\n <lc-badge [variant]=\"grandchild.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ grandchild.badge.value }}</lc-badge>\n }\n </a>\n }\n </div>\n }\n } @else {\n <!-- Section child (simple link) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <a\n [routerLink]=\"child.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n [routerLinkActiveOptions]=\"{ exact: child.route === '/' }\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(child)\"\n [attr.aria-current]=\"isItemActive(child) ? 'page' : null\"\n [title]=\"collapsed() ? child.label : ''\">\n @if (child.icon) {\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n </a>\n @if (child.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"child.action.ariaLabel || child.label + ' action'\"\n (click)=\"handleItemAction($event, child)\">\n <lc-icon [name]=\"child.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n </li>\n }\n </ul>\n }\n </div>\n } @else if (item.children?.length) {\n <!-- Parent item with children (collapsible group) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <button\n type=\"button\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--parent\"\n [class.lc-sidenav__nav-item--expanded]=\"isExpanded(item)\"\n [class.lc-sidenav__nav-item--has-active-child]=\"hasActiveChild(item)\"\n (click)=\"toggleExpanded(item)\"\n [attr.aria-expanded]=\"isExpanded(item)\"\n [title]=\"collapsed() ? item.label : ''\">\n <lc-icon [name]=\"item.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <lc-badge [variant]=\"item.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ item.badge.value }}</lc-badge>\n }\n <lc-icon name=\"chevron-down\" size=\"xs\" [decorative]=\"true\" class=\"lc-sidenav__nav-chevron\" />\n </button>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (isExpanded(item)) {\n <div class=\"lc-sidenav__nav-children\">\n @for (child of item.children; track child.id) {\n <a\n [routerLink]=\"child.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(child)\"\n [attr.aria-current]=\"isItemActive(child) ? 'page' : null\">\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n </a>\n }\n </div>\n }\n } @else {\n <!-- Simple item without children -->\n <div class=\"lc-sidenav__nav-item-row\">\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n [routerLinkActiveOptions]=\"{ exact: item.route === '/' }\"\n class=\"lc-sidenav__nav-item\"\n (click)=\"handleItemClick(item)\"\n [attr.aria-current]=\"isItemActive(item) ? 'page' : null\"\n [title]=\"collapsed() ? item.label : ''\">\n <lc-icon [name]=\"item.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <lc-badge [variant]=\"item.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ item.badge.value }}</lc-badge>\n }\n </a>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n }\n </nav>\n }\n\n <!-- Content projection (for custom content) -->\n <div class=\"lc-sidenav__content\" [class.lc-sidenav__content--docked]=\"mode() === 'docked'\">\n <ng-content></ng-content>\n </div>\n </aside>\n</ng-template>\n", styles: [".lc-sidenav-container{position:relative;z-index:1000}.lc-sidenav-container--docked{position:static;z-index:auto;height:100%}.lc-sidenav__overlay{position:fixed;inset:0;background-color:#00000080;opacity:0;animation:fadeIn .3s ease-out forwards;z-index:1000;cursor:pointer}@media(prefers-reduced-motion:reduce){.lc-sidenav__overlay{animation:none;opacity:1}}.lc-sidenav{--lc-sidenav-bg: var(--color-sidebar, var(--color-surface));--lc-sidenav-fg: var(--color-text-secondary);--lc-sidenav-fg-active: var(--color-text-primary);--lc-sidenav-border: var(--color-border);--lc-sidenav-hover-bg: var(--color-surface-hover);--lc-sidenav-section-fg: var(--color-text-tertiary);--lc-sidenav-active-bg: var(--color-surface-selected);--lc-sidenav-active-fg: var(--color-primary-500);--lc-sidenav-active-icon: var(--color-primary-500);position:fixed;top:0;bottom:0;background-color:var(--lc-sidenav-bg);box-shadow:var(--elevation-3, 0 10px 15px -3px rgba(0, 0, 0, .1));z-index:1001;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden}.lc-sidenav--left{left:0}.lc-sidenav--right{right:0}.lc-sidenav--drawer.lc-sidenav--left{animation:slideInLeft .3s ease-out}.lc-sidenav--drawer.lc-sidenav--right{animation:slideInRight .3s ease-out}@media(prefers-reduced-motion:reduce){.lc-sidenav--drawer{animation:none!important}}.lc-sidenav--docked{position:static;z-index:auto;height:100%;box-shadow:none;border-right:1px solid var(--lc-sidenav-border, #e5e7eb);transform:translate(0);transition:width .3s ease,transform .3s ease}.lc-sidenav--docked:not(.lc-sidenav--open){width:0!important;overflow:hidden;border-right:none}.lc-sidenav--collapsed{width:56px!important;overflow:visible}.lc-sidenav--collapsed .lc-sidenav__nav-label,.lc-sidenav--collapsed .lc-sidenav__nav-chevron,.lc-sidenav--collapsed .lc-sidenav__section-title,.lc-sidenav--collapsed .lc-sidenav__action-btn,.lc-sidenav--collapsed .lc-sidenav__section-header{display:none}.lc-sidenav--collapsed .lc-sidenav__nav{padding:.5rem;gap:.125rem}.lc-sidenav--collapsed .lc-sidenav__nav-item-row .lc-sidenav__action-btn{display:none}.lc-sidenav--collapsed .lc-sidenav__nav-item{justify-content:center;padding:.625rem;gap:0;border-radius:var(--border-radius-md, .375rem);position:relative}.lc-sidenav--collapsed .lc-sidenav__nav-item:hover:after{content:attr(title);position:absolute;left:100%;top:50%;transform:translateY(-50%);margin-left:8px;padding:4px 10px;background-color:var(--color-neutral-900, #111827);color:#fff;font-size:.75rem;white-space:nowrap;border-radius:4px;z-index:1002;pointer-events:none}.lc-sidenav--collapsed .lc-sidenav__nav-icon{width:22px;height:22px}.lc-sidenav--collapsed .lc-sidenav__nav-badge{position:absolute;top:2px;right:2px;margin-left:0;font-size:.625rem;min-width:0;padding:0 3px;line-height:1.2}.lc-sidenav--collapsed .lc-sidenav__nav-children{display:none}.lc-sidenav--collapsed .lc-sidenav__section-items{display:flex;flex-direction:column;gap:.125rem}.lc-sidenav--collapsed .lc-sidenav__section{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--color-divider, #e5e7eb)}.lc-sidenav--collapsed .lc-sidenav__content{display:none}.lc-sidenav--collapsed .lc-sidenav__logo{padding:0;justify-content:center}.lc-sidenav__logo{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-3);padding:0 var(--spacing-4);border-bottom:1px solid var(--lc-sidenav-border);min-height:64px;flex-shrink:0}.lc-sidenav__logo--size-xs,.lc-sidenav__logo--size-sm{min-height:56px}.lc-sidenav__logo--size-md{min-height:64px}.lc-sidenav__logo--size-lg{min-height:80px}.lc-sidenav__logo--size-xl{min-height:112px}.lc-sidenav__logo-link{display:flex;align-items:center;flex:0 1 auto;min-width:0;max-width:100%;text-decoration:none;color:var(--lc-sidenav-fg);background:transparent;border:none;padding:0;cursor:pointer}.lc-sidenav__logo-link:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:4px;border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__logo-toggle{display:inline-flex;align-items:center;justify-content:center;width:1.875rem;height:1.875rem;border:none;border-radius:var(--border-radius-md, .375rem);background:transparent;color:var(--lc-sidenav-fg);opacity:.8;flex-shrink:0;cursor:pointer;transition:background-color .2s ease,color .2s ease,opacity .2s ease}.lc-sidenav__logo-toggle:hover{background-color:var(--lc-sidenav-hover-bg);opacity:1}.lc-sidenav__logo-toggle:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px}.lc-sidenav__close{position:absolute;top:1rem;right:1rem;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;background:none;border:none;border-radius:var(--border-radius-md, .375rem);color:var(--color-text-secondary);cursor:pointer;transition:background-color .2s ease,color .2s ease;z-index:1}.lc-sidenav__close:hover{background-color:var(--color-surface);color:var(--color-text-primary)}.lc-sidenav__close:focus-visible{outline:2px solid var(--color-primary-500, rgb(59, 130, 246));outline-offset:2px}.lc-sidenav__close:active{background-color:var(--color-border)}.lc-sidenav__close svg{width:1.25rem;height:1.25rem}.lc-sidenav__nav{display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem));padding:var(--lc-density-padding-md, 1rem);padding-top:4rem}.lc-sidenav__nav--docked{padding-top:var(--lc-density-padding-md, 1rem);gap:0}.lc-sidenav__section:not(:first-child){margin-top:var(--spacing-4, 1rem);padding-top:var(--spacing-3, .75rem)}.lc-sidenav__section-header{display:flex;align-items:center;justify-content:space-between;padding-right:0;margin-bottom:var(--spacing-1, .25rem)}.lc-sidenav__section-title{padding:0 var(--spacing-3, .75rem);margin-bottom:0;font-size:var(--font-size-xs, .75rem);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--lc-sidenav-section-fg);line-height:28px}.lc-sidenav__section-items{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem))}.lc-sidenav__nav-item{display:flex;align-items:center;gap:var(--spacing-3, .75rem);padding:var(--lc-density-padding-xs, var(--spacing-2, .5rem)) var(--spacing-3, .75rem);text-decoration:none;color:var(--lc-sidenav-fg);border-radius:var(--border-radius-md, .375rem);transition:background-color .2s ease,color .2s ease;font-size:var(--font-size-sm, .875rem);font-weight:500;cursor:pointer}.lc-sidenav__nav-item:hover{background-color:var(--lc-sidenav-hover-bg);color:var(--lc-sidenav-fg-active)}.lc-sidenav__nav-item:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px}.lc-sidenav__nav-item--active{background-color:var(--lc-sidenav-active-bg);color:var(--lc-sidenav-active-fg);font-weight:600;box-shadow:inset 2px 0 0 var(--color-primary-500)}.lc-sidenav__nav-item--active .lc-sidenav__nav-icon{color:var(--lc-sidenav-active-icon)}.lc-sidenav__nav-item--active:hover{background-color:var(--lc-sidenav-active-bg);color:var(--lc-sidenav-active-fg)}.lc-sidenav__nav-item--has-active-child{color:var(--lc-sidenav-fg-active);font-weight:600}.lc-sidenav__nav-item--has-active-child .lc-sidenav__nav-icon{color:var(--lc-sidenav-fg-active)}.lc-sidenav__nav-icon{width:20px;height:20px;flex-shrink:0;color:currentColor}.lc-sidenav__nav-chevron{width:16px;height:16px;flex-shrink:0;margin-left:auto;transition:transform .2s ease}.lc-sidenav__nav-badge{flex-shrink:0;margin-left:auto}.lc-sidenav__nav-item--expanded .lc-sidenav__nav-chevron{transform:rotate(180deg)}.lc-sidenav__nav-item--parent{width:100%;border:none;background:none;font-family:inherit;text-align:left}.lc-sidenav__nav-children{display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem));padding-left:var(--spacing-4, 1rem)}.lc-sidenav__nav-item--child{font-size:var(--font-size-sm, .875rem)}.lc-sidenav__nav-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lc-sidenav__nav-item-row{display:flex;align-items:center}.lc-sidenav__nav-item-row .lc-sidenav__nav-item{flex:1;min-width:0}.lc-sidenav__nav-item-row .lc-sidenav__action-btn{opacity:0;transition:opacity .15s ease}.lc-sidenav__nav-item-row:hover .lc-sidenav__action-btn{opacity:1}.lc-sidenav__action-btn{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:28px;height:28px;padding:0;background:transparent;border:none;border-radius:var(--border-radius-sm, .25rem);color:var(--lc-sidenav-section-fg);cursor:pointer;transition:background-color .15s ease,color .15s ease}.lc-sidenav__action-btn:hover{background-color:var(--lc-sidenav-hover-bg);color:var(--lc-sidenav-fg-active)}.lc-sidenav__action-btn:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px;opacity:1}.lc-sidenav__content{flex:1;padding:4rem 1rem 1rem;overflow-y:auto;-webkit-overflow-scrolling:touch}.lc-sidenav__content--docked{padding-top:1rem}.lc-sidenav__content::-webkit-scrollbar{width:.5rem}.lc-sidenav__content::-webkit-scrollbar-track{background:var(--color-surface);border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__content::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__content::-webkit-scrollbar-thumb:hover{background:var(--color-surface-hover)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInLeft{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}@media(max-width:640px){.lc-sidenav--drawer{width:100%!important;max-width:320px}}@media(max-width:480px){.lc-sidenav--drawer{max-width:280px}}.lc-sidenav__content:focus{outline:none}.lc-sidenav__content a:focus-visible,.lc-sidenav__content button:focus-visible{outline:2px solid var(--color-primary-500, rgb(59, 130, 246));outline-offset:2px;border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav--light{--lc-sidenav-bg: #ffffff;--lc-sidenav-fg: #374151;--lc-sidenav-fg-active: #111827;--lc-sidenav-border: #e5e7eb;--lc-sidenav-hover-bg: #f3f4f6;--lc-sidenav-section-fg: #6b7280;--lc-sidenav-active-bg: #f0f8fa;--lc-sidenav-active-fg: #144f5b;--lc-sidenav-active-icon: #1a6a79}.lc-sidenav--dark{--lc-sidenav-bg: var(--color-sidebar, var(--color-surface));--lc-sidenav-fg: var(--color-text-secondary);--lc-sidenav-fg-active: var(--color-text-primary);--lc-sidenav-border: var(--color-border);--lc-sidenav-hover-bg: var(--color-surface-hover);--lc-sidenav-section-fg: var(--color-text-tertiary);--lc-sidenav-active-bg: var(--color-surface-selected);--lc-sidenav-active-fg: var(--color-primary-500);--lc-sidenav-active-icon: var(--color-primary-500)}@media print{.lc-sidenav-container,.lc-sidenav__overlay,.lc-sidenav{display:none}}\n"] }]
7232
+ }, template: "<!-- Drawer mode: render with overlay and conditional visibility -->\n@if (effectiveMode() === 'drawer') {\n @if (isOpen()) {\n <!-- Overlay backdrop -->\n @if (hasOverlay()) {\n <div\n class=\"lc-sidenav__overlay\"\n (click)=\"handleClose()\"\n aria-hidden=\"true\">\n </div>\n }\n\n <ng-container *ngTemplateOutlet=\"sidenavPanel\" />\n }\n}\n\n<!-- Docked mode: always render, visibility controlled by CSS -->\n@if (effectiveMode() === 'docked') {\n <ng-container *ngTemplateOutlet=\"sidenavPanel\" />\n}\n\n<!-- Shared sidenav panel template -->\n<ng-template #sidenavPanel>\n <aside\n [class]=\"sidenavClasses()\"\n [ngStyle]=\"sidenavStyles()\"\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabel()\">\n\n <!-- Logo area (sidebar-first layout) -->\n @if (showLogo()) {\n <div\n class=\"lc-sidenav__logo\"\n [class.lc-sidenav__logo--size-xs]=\"logoSize() === 'xs'\"\n [class.lc-sidenav__logo--size-sm]=\"logoSize() === 'sm'\"\n [class.lc-sidenav__logo--size-md]=\"logoSize() === 'md'\"\n [class.lc-sidenav__logo--size-lg]=\"logoSize() === 'lg'\"\n [class.lc-sidenav__logo--size-xl]=\"logoSize() === 'xl'\"\n >\n <button type=\"button\" class=\"lc-sidenav__logo-link\" aria-label=\"Toggle sidebar\" (click)=\"toggleCollapsed()\">\n <lc-logo\n [variant]=\"collapsed() ? 'emblem' : 'full'\"\n [size]=\"collapsed() ? 'sm' : logoSize()\"\n [clickable]=\"false\"\n [colorMode]=\"theme() === 'dark' ? 'dark' : theme() === 'light' ? 'light' : 'auto'\"\n [src]=\"logoSrc()\"\n [emblemSrc]=\"logoEmblemSrc()\"\n [darkSrc]=\"logoDarkSrc()\"\n [darkEmblemSrc]=\"logoDarkEmblemSrc()\"\n [alt]=\"logoAlt() || 'Logo'\"\n />\n </button>\n @if (!collapsed() && effectiveMode() === 'docked') {\n <button\n type=\"button\"\n class=\"lc-sidenav__logo-toggle\"\n (click)=\"toggleCollapsed()\"\n [attr.aria-label]=\"position() === 'right' ? 'Collapse navigation to the right' : 'Collapse navigation to the left'\"\n title=\"Collapse sidebar\">\n <lc-icon\n [name]=\"position() === 'right' ? 'chevron-right' : 'chevron-left'\"\n size=\"sm\"\n [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n\n <!-- Close button (drawer mode only) -->\n @if (effectiveMode() === 'drawer') {\n <button\n type=\"button\"\n class=\"lc-sidenav__close\"\n (click)=\"handleClose()\"\n aria-label=\"Close navigation\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n\n <!-- Navigation items (if provided) -->\n @if (items().length > 0) {\n <nav class=\"lc-sidenav__nav\" [class.lc-sidenav__nav--docked]=\"effectiveMode() === 'docked'\">\n @for (item of sortedItems(); track item.id) {\n <!-- Section headline -->\n @if (item.isSection) {\n <div class=\"lc-sidenav__section\">\n <div class=\"lc-sidenav__section-header\">\n <h2 class=\"lc-sidenav__section-title\">{{ item.label }}</h2>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (item.children?.length) {\n <ul class=\"lc-sidenav__section-items\">\n @for (child of item.children; track child.id) {\n <li>\n @if (child.children?.length) {\n <!-- Section child with nested children (collapsible) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <button\n type=\"button\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--parent\"\n [class.lc-sidenav__nav-item--expanded]=\"isExpanded(child)\"\n [class.lc-sidenav__nav-item--has-active-child]=\"hasActiveChild(child)\"\n (click)=\"toggleExpanded(child)\"\n [attr.aria-expanded]=\"isExpanded(child)\"\n [title]=\"collapsed() ? child.label : ''\">\n @if (child.icon) {\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n <lc-icon name=\"chevron-down\" size=\"xs\" [decorative]=\"true\" class=\"lc-sidenav__nav-chevron\" />\n </button>\n @if (child.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"child.action.ariaLabel || child.label + ' action'\"\n (click)=\"handleItemAction($event, child)\">\n <lc-icon [name]=\"child.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (isExpanded(child)) {\n <div class=\"lc-sidenav__nav-children\">\n @for (grandchild of child.children; track grandchild.id) {\n <a\n [routerLink]=\"grandchild.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(grandchild)\"\n [attr.aria-current]=\"isItemActive(grandchild) ? 'page' : null\">\n @if (grandchild.icon) {\n <lc-icon [name]=\"grandchild.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ grandchild.label }}</span>\n @if (grandchild.badge) {\n <lc-badge [variant]=\"grandchild.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ grandchild.badge.value }}</lc-badge>\n }\n </a>\n }\n </div>\n }\n } @else {\n <!-- Section child (simple link) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <a\n [routerLink]=\"child.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n [routerLinkActiveOptions]=\"{ exact: child.route === '/' }\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(child)\"\n [attr.aria-current]=\"isItemActive(child) ? 'page' : null\"\n [title]=\"collapsed() ? child.label : ''\">\n @if (child.icon) {\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n }\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n </a>\n @if (child.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"child.action.ariaLabel || child.label + ' action'\"\n (click)=\"handleItemAction($event, child)\">\n <lc-icon [name]=\"child.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n </li>\n }\n </ul>\n }\n </div>\n } @else if (item.children?.length) {\n <!-- Parent item with children (collapsible group) -->\n <div class=\"lc-sidenav__nav-item-row\">\n <button\n type=\"button\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--parent\"\n [class.lc-sidenav__nav-item--expanded]=\"isExpanded(item)\"\n [class.lc-sidenav__nav-item--has-active-child]=\"hasActiveChild(item)\"\n (click)=\"toggleExpanded(item)\"\n [attr.aria-expanded]=\"isExpanded(item)\"\n [title]=\"collapsed() ? item.label : ''\">\n <lc-icon [name]=\"item.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <lc-badge [variant]=\"item.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ item.badge.value }}</lc-badge>\n }\n <lc-icon name=\"chevron-down\" size=\"xs\" [decorative]=\"true\" class=\"lc-sidenav__nav-chevron\" />\n </button>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n @if (isExpanded(item)) {\n <div class=\"lc-sidenav__nav-children\">\n @for (child of item.children; track child.id) {\n <a\n [routerLink]=\"child.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n class=\"lc-sidenav__nav-item lc-sidenav__nav-item--child\"\n (click)=\"handleItemClick(child)\"\n [attr.aria-current]=\"isItemActive(child) ? 'page' : null\">\n <lc-icon [name]=\"child.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ child.label }}</span>\n @if (child.badge) {\n <lc-badge [variant]=\"child.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ child.badge.value }}</lc-badge>\n }\n </a>\n }\n </div>\n }\n } @else {\n <!-- Simple item without children -->\n <div class=\"lc-sidenav__nav-item-row\">\n <a\n [routerLink]=\"item.route\"\n routerLinkActive=\"lc-sidenav__nav-item--active\"\n [routerLinkActiveOptions]=\"{ exact: item.route === '/' }\"\n class=\"lc-sidenav__nav-item\"\n (click)=\"handleItemClick(item)\"\n [attr.aria-current]=\"isItemActive(item) ? 'page' : null\"\n [title]=\"collapsed() ? item.label : ''\">\n <lc-icon [name]=\"item.icon\" size=\"sm\" [decorative]=\"true\" class=\"lc-sidenav__nav-icon\" />\n <span class=\"lc-sidenav__nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <lc-badge [variant]=\"item.badge.variant || 'default'\" size=\"xs\" [rounded]=\"true\" class=\"lc-sidenav__nav-badge\">{{ item.badge.value }}</lc-badge>\n }\n </a>\n @if (item.action) {\n <button\n type=\"button\"\n class=\"lc-sidenav__action-btn\"\n [attr.aria-label]=\"item.action.ariaLabel || item.label + ' action'\"\n (click)=\"handleItemAction($event, item)\">\n <lc-icon [name]=\"item.action.icon\" size=\"xs\" [decorative]=\"true\" />\n </button>\n }\n </div>\n }\n }\n </nav>\n }\n\n <!-- Content projection (for custom content) -->\n <div class=\"lc-sidenav__content\" [class.lc-sidenav__content--docked]=\"mode() === 'docked'\">\n <ng-content></ng-content>\n </div>\n </aside>\n</ng-template>\n", styles: [".lc-sidenav-container{position:relative;z-index:1000}.lc-sidenav-container--docked{position:static;z-index:auto;height:100%}.lc-sidenav__overlay{position:fixed;inset:0;background-color:#00000080;opacity:0;animation:fadeIn .3s ease-out forwards;z-index:1000;cursor:pointer}@media(prefers-reduced-motion:reduce){.lc-sidenav__overlay{animation:none;opacity:1}}.lc-sidenav{--lc-sidenav-bg: var(--color-sidebar, var(--color-surface));--lc-sidenav-fg: var(--color-text-secondary);--lc-sidenav-fg-active: var(--color-text-primary);--lc-sidenav-border: var(--color-border);--lc-sidenav-hover-bg: var(--color-surface-hover);--lc-sidenav-section-fg: var(--color-text-tertiary);--lc-sidenav-active-bg: var(--color-surface-selected);--lc-sidenav-active-fg: var(--color-primary-500);--lc-sidenav-active-icon: var(--color-primary-500);--lc-sidenav-badge-ring: var(--lc-sidenav-bg);position:fixed;top:0;bottom:0;background-color:var(--lc-sidenav-bg);box-shadow:var(--elevation-3, 0 10px 15px -3px rgba(0, 0, 0, .1));z-index:1001;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden}.lc-sidenav--left{left:0}.lc-sidenav--right{right:0}.lc-sidenav--drawer.lc-sidenav--left{animation:slideInLeft .3s ease-out}.lc-sidenav--drawer.lc-sidenav--right{animation:slideInRight .3s ease-out}@media(prefers-reduced-motion:reduce){.lc-sidenav--drawer{animation:none!important}}.lc-sidenav--docked{position:static;z-index:auto;height:100%;box-shadow:none;border-right:1px solid var(--lc-sidenav-border, #e5e7eb);transform:translate(0);transition:width .3s ease,transform .3s ease}.lc-sidenav--docked:not(.lc-sidenav--open){width:0!important;overflow:hidden;border-right:none}.lc-sidenav--collapsed{width:56px!important;overflow:visible}.lc-sidenav--collapsed .lc-sidenav__nav-label,.lc-sidenav--collapsed .lc-sidenav__nav-chevron,.lc-sidenav--collapsed .lc-sidenav__section-title,.lc-sidenav--collapsed .lc-sidenav__action-btn,.lc-sidenav--collapsed .lc-sidenav__section-header{display:none}.lc-sidenav--collapsed .lc-sidenav__nav{padding:.5rem;gap:.125rem}.lc-sidenav--collapsed .lc-sidenav__nav-item-row .lc-sidenav__action-btn{display:none}.lc-sidenav--collapsed .lc-sidenav__nav-item{justify-content:center;padding:.625rem;gap:0;border-radius:var(--border-radius-md, .375rem);position:relative}.lc-sidenav--collapsed .lc-sidenav__nav-item:hover:after{content:attr(title);position:absolute;left:100%;top:50%;transform:translateY(-50%);margin-left:8px;padding:4px 10px;background-color:var(--color-neutral-900, #111827);color:#fff;font-size:.75rem;white-space:nowrap;border-radius:4px;z-index:1002;pointer-events:none}.lc-sidenav--collapsed .lc-sidenav__nav-icon{width:22px;height:22px}.lc-sidenav--collapsed .lc-sidenav__nav-badge{position:absolute;top:0;right:0;transform:translate(4px,-4px);margin-left:0;border-radius:var(--border-radius-full, 9999px);background-color:var(--lc-sidenav-badge-ring);box-shadow:0 0 0 2px var(--lc-sidenav-badge-ring);pointer-events:none}.lc-sidenav--collapsed .lc-sidenav__nav-children{display:none}.lc-sidenav--collapsed .lc-sidenav__section-items{display:flex;flex-direction:column;gap:.125rem}.lc-sidenav--collapsed .lc-sidenav__section{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--color-divider, #e5e7eb)}.lc-sidenav--collapsed .lc-sidenav__content{display:none}.lc-sidenav--collapsed .lc-sidenav__logo{padding:0;justify-content:center}.lc-sidenav__logo{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-3);padding:0 var(--spacing-4);border-bottom:1px solid var(--lc-sidenav-border);min-height:64px;flex-shrink:0}.lc-sidenav__logo--size-xs,.lc-sidenav__logo--size-sm{min-height:56px}.lc-sidenav__logo--size-md{min-height:64px}.lc-sidenav__logo--size-lg{min-height:80px}.lc-sidenav__logo--size-xl{min-height:112px}.lc-sidenav__logo-link{display:flex;align-items:center;flex:0 1 auto;min-width:0;max-width:100%;text-decoration:none;color:var(--lc-sidenav-fg);background:transparent;border:none;padding:0;cursor:pointer}.lc-sidenav__logo-link:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:4px;border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__logo-toggle{display:inline-flex;align-items:center;justify-content:center;width:1.875rem;height:1.875rem;border:none;border-radius:var(--border-radius-md, .375rem);background:transparent;color:var(--lc-sidenav-fg);opacity:.8;flex-shrink:0;cursor:pointer;transition:background-color .2s ease,color .2s ease,opacity .2s ease}.lc-sidenav__logo-toggle:hover{background-color:var(--lc-sidenav-hover-bg);opacity:1}.lc-sidenav__logo-toggle:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px}.lc-sidenav__close{position:absolute;top:1rem;right:1rem;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;background:none;border:none;border-radius:var(--border-radius-md, .375rem);color:var(--color-text-secondary);cursor:pointer;transition:background-color .2s ease,color .2s ease;z-index:1}.lc-sidenav__close:hover{background-color:var(--color-surface);color:var(--color-text-primary)}.lc-sidenav__close:focus-visible{outline:2px solid var(--color-primary-500, rgb(59, 130, 246));outline-offset:2px}.lc-sidenav__close:active{background-color:var(--color-border)}.lc-sidenav__close svg{width:1.25rem;height:1.25rem}.lc-sidenav__nav{display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem));padding:var(--lc-density-padding-md, 1rem);padding-top:4rem}.lc-sidenav__nav--docked{padding-top:var(--lc-density-padding-md, 1rem);gap:0}.lc-sidenav__section:not(:first-child){margin-top:var(--spacing-4, 1rem);padding-top:var(--spacing-3, .75rem)}.lc-sidenav__section-header{display:flex;align-items:center;justify-content:space-between;padding-right:0;margin-bottom:var(--spacing-1, .25rem)}.lc-sidenav__section-title{padding:0 var(--spacing-3, .75rem);margin-bottom:0;font-size:var(--font-size-xs, .75rem);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--lc-sidenav-section-fg);line-height:28px}.lc-sidenav__section-items{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem))}.lc-sidenav__nav-item{display:flex;align-items:center;gap:var(--spacing-3, .75rem);padding:var(--lc-density-padding-xs, var(--spacing-2, .5rem)) var(--spacing-3, .75rem);text-decoration:none;color:var(--lc-sidenav-fg);border-radius:var(--border-radius-md, .375rem);transition:background-color .2s ease,color .2s ease;font-size:var(--font-size-sm, .875rem);font-weight:500;cursor:pointer}.lc-sidenav__nav-item:hover{background-color:var(--lc-sidenav-hover-bg);color:var(--lc-sidenav-fg-active)}.lc-sidenav__nav-item:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px}.lc-sidenav__nav-item--active{background-color:var(--lc-sidenav-active-bg);color:var(--lc-sidenav-active-fg);font-weight:600;box-shadow:inset 2px 0 0 var(--color-primary-500)}.lc-sidenav__nav-item--active .lc-sidenav__nav-icon{color:var(--lc-sidenav-active-icon)}.lc-sidenav__nav-item--active:hover{background-color:var(--lc-sidenav-active-bg);color:var(--lc-sidenav-active-fg)}.lc-sidenav__nav-item--has-active-child{color:var(--lc-sidenav-fg-active);font-weight:600}.lc-sidenav__nav-item--has-active-child .lc-sidenav__nav-icon{color:var(--lc-sidenav-fg-active)}.lc-sidenav__nav-icon{width:20px;height:20px;flex-shrink:0;color:currentColor}.lc-sidenav__nav-chevron{width:16px;height:16px;flex-shrink:0;margin-left:auto;transition:transform .2s ease}.lc-sidenav__nav-badge{flex-shrink:0;margin-left:auto}:host ::ng-deep .lc-sidenav--collapsed .lc-sidenav__nav-badge .lc-badge{min-width:16px;height:16px;padding:0 4px;font-size:10px;font-weight:600;line-height:1}.lc-sidenav__nav-item--expanded .lc-sidenav__nav-chevron{transform:rotate(180deg)}.lc-sidenav__nav-item--parent{width:100%;border:none;background:none;font-family:inherit;text-align:left}.lc-sidenav__nav-children{display:flex;flex-direction:column;gap:var(--lc-density-gap-xs, var(--spacing-1, .25rem));padding-left:var(--spacing-4, 1rem)}.lc-sidenav__nav-item--child{font-size:var(--font-size-sm, .875rem)}.lc-sidenav__nav-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lc-sidenav__nav-item-row{display:flex;align-items:center}.lc-sidenav__nav-item-row .lc-sidenav__nav-item{flex:1;min-width:0}.lc-sidenav__nav-item-row .lc-sidenav__action-btn{opacity:0;transition:opacity .15s ease}.lc-sidenav__nav-item-row:hover .lc-sidenav__action-btn{opacity:1}.lc-sidenav__action-btn{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:28px;height:28px;padding:0;background:transparent;border:none;border-radius:var(--border-radius-sm, .25rem);color:var(--lc-sidenav-section-fg);cursor:pointer;transition:background-color .15s ease,color .15s ease}.lc-sidenav__action-btn:hover{background-color:var(--lc-sidenav-hover-bg);color:var(--lc-sidenav-fg-active)}.lc-sidenav__action-btn:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px;opacity:1}.lc-sidenav__content{flex:1;padding:4rem 1rem 1rem;overflow-y:auto;-webkit-overflow-scrolling:touch}.lc-sidenav__content--docked{padding-top:1rem}.lc-sidenav__content::-webkit-scrollbar{width:.5rem}.lc-sidenav__content::-webkit-scrollbar-track{background:var(--color-surface);border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__content::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav__content::-webkit-scrollbar-thumb:hover{background:var(--color-surface-hover)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInLeft{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}@media(max-width:640px){.lc-sidenav--drawer{width:100%!important;max-width:320px}}@media(max-width:480px){.lc-sidenav--drawer{max-width:280px}}.lc-sidenav__content:focus{outline:none}.lc-sidenav__content a:focus-visible,.lc-sidenav__content button:focus-visible{outline:2px solid var(--color-primary-500, rgb(59, 130, 246));outline-offset:2px;border-radius:var(--border-radius-sm, .25rem)}.lc-sidenav--light{--lc-sidenav-bg: #ffffff;--lc-sidenav-fg: #374151;--lc-sidenav-fg-active: #111827;--lc-sidenav-border: #e5e7eb;--lc-sidenav-hover-bg: #f3f4f6;--lc-sidenav-section-fg: #6b7280;--lc-sidenav-active-bg: #f0f8fa;--lc-sidenav-active-fg: #144f5b;--lc-sidenav-active-icon: #1a6a79}.lc-sidenav--dark{--lc-sidenav-bg: var(--color-sidebar, var(--color-surface));--lc-sidenav-fg: var(--color-text-secondary);--lc-sidenav-fg-active: var(--color-text-primary);--lc-sidenav-border: var(--color-border);--lc-sidenav-hover-bg: var(--color-surface-hover);--lc-sidenav-section-fg: var(--color-text-tertiary);--lc-sidenav-active-bg: var(--color-surface-selected);--lc-sidenav-active-fg: var(--color-primary-500);--lc-sidenav-active-icon: var(--color-primary-500)}@media print{.lc-sidenav-container,.lc-sidenav__overlay,.lc-sidenav{display:none}}\n"] }]
7141
7233
  }], ctorParameters: () => [], propDecorators: { collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }, { type: i0.Output, args: ["collapsedChange"] }], showLogo: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLogo", required: false }] }], logoSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoSrc", required: false }] }], logoEmblemSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoEmblemSrc", required: false }] }], logoDarkSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoDarkSrc", required: false }] }], logoDarkEmblemSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoDarkEmblemSrc", required: false }] }], logoAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoAlt", required: false }] }], logoSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoSize", required: false }] }], isOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpen", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], mobileBreakpoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileBreakpoint", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], hasOverlay: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasOverlay", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], activeRoute: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeRoute", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], itemClicked: [{ type: i0.Output, args: ["itemClicked"] }], itemAction: [{ type: i0.Output, args: ["itemAction"] }], handleKeydown: [{
7142
7234
  type: HostListener,
7143
7235
  args: ['document:keydown', ['$event']]
@@ -16730,5 +16822,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImpo
16730
16822
  * Generated bundle index. Do not edit.
16731
16823
  */
16732
16824
 
16733
- export { AccordionComponent, AccordionContentDirective, AccordionGroupComponent, AccordionHeaderDirective, AlertComponent, AnimationDurationFast, AnimationEasingEaseIn, AnimationEasingEaseInOut, AnimationEasingEaseOut, AreaChartComponent, AvatarComponent, AvatarGroupComponent, BadgeComponent, BarChartComponent, BorderRadius2xl, BorderRadiusFull, BorderRadiusLg, BorderRadiusMd, BorderRadiusNone, BorderRadiusSm, BorderRadiusXl, BreadcrumbsComponent, ButtonComponent, CalendarComponent, CalloutComponent, CardComponent, ChatComponent, CheckboxComponent, ChipComponent, CodeBlockComponent, ColorAccentOrange, ColorAccentPurple, ColorAccentRed, ColorAccentRust, ColorAccentViolet, ColorBackgroundDark, ColorErrorDark, ColorErrorDefault, ColorErrorLight, ColorInfoDark, ColorInfoDefault, ColorInfoLight, ColorNeutral100, ColorNeutral200, ColorNeutral300, ColorNeutral400, ColorNeutral50, ColorNeutral500, ColorNeutral600, ColorNeutral700, ColorNeutral800, ColorNeutral900, ColorPickerComponent, ColorPrimary100, ColorPrimary200, ColorPrimary300, ColorPrimary400, ColorPrimary50, ColorPrimary500, ColorPrimary600, ColorPrimary700, ColorPrimary800, ColorPrimary900, ColorSecondary100, ColorSecondary200, ColorSecondary300, ColorSecondary400, ColorSecondary50, ColorSecondary500, ColorSecondary600, ColorSecondary700, ColorSecondary800, ColorSecondary900, ColorSidebarDark, ColorSuccessDark, ColorSuccessDefault, ColorSuccessLight, ColorSurfaceDarkBase, ColorSurfaceDarkRaised, ColorSurfaceDarkSunken, ColorTextDarkPrimary, ColorTextDarkSecondary, ColorTextDarkTertiary, ColorWarningDark, ColorWarningDefault, ColorWarningLight, ComboboxComponent, ConfirmDialogComponent, ConfirmService, ContainerComponent, DateRangePickerComponent, DatepickerComponent, DependencyViewerComponent, DescriptionListComponent, DiffViewerComponent, DividerComponent, DocumentViewerComponent, DonutChartComponent, DrawerComponent, Elevation1, Elevation2, Elevation3, Elevation4, EmailInputComponent, EmptyStateComponent, ErrorDisplayComponent, FILE_FALLBACK_ICON, FOLDER_ICON, FOLDER_OPEN_ICON, FieldGroupComponent, FileUploadComponent, FilterBarComponent, FooterComponent, FunnelChartComponent, GalleryComponent, GanttChartComponent, GaugeComponent, HeaderComponent, HeatmapComponent, HeroComponent, ICON_ALIASES, ICON_NAMES, IconComponent, InputComponent, KanbanBoardComponent, LC_LOGO_BASE_PATH, LineChartComponent, ListComponent, ListItemTemplateDirective, LogViewerComponent, LogoComponent, MarkdownComponent, MenuComponent, ModalComponent, NotificationCenterComponent, NumberInputComponent, PageHeaderComponent, PageLayoutComponent, PaginationComponent, PasswordInputComponent, PieChartComponent, PipelineComponent, PopoverComponent, ProgressBarComponent, ProgressRingComponent, RadarChartComponent, RadioComponent, RatingComponent, RichTextEditorComponent, ScatterPlotComponent, SearchInputComponent, SectionComponent, SelectComponent, SidenavComponent, SizeContentMaxWidth, SizeInteractiveLgFontSize, SizeInteractiveLgHeight, SizeInteractiveLgPadding, SizeInteractiveMdFontSize, SizeInteractiveMdHeight, SizeInteractiveMdPadding, SizeInteractiveSmFontSize, SizeInteractiveSmHeight, SizeInteractiveSmPadding, SizeInteractiveXsFontSize, SizeInteractiveXsHeight, SizeInteractiveXsPadding, SizeMinTouchHeight, SizeMinTouchWidth, SkeletonComponent, SliderComponent, SpacerComponent, Spacing0, Spacing05, Spacing1, Spacing10, Spacing11, Spacing12, Spacing14, Spacing15, Spacing16, Spacing2, Spacing25, Spacing3, Spacing35, Spacing4, Spacing5, Spacing6, Spacing7, Spacing8, Spacing9, SparklineComponent, SpinnerComponent, SplitPaneComponent, StackComponent, StackedBarChartComponent, StageListComponent, StatTrendComponent, StepperComponent, SwitchComponent, TabComponent, TableCellDirective, TableComponent, TabsComponent, TagInputComponent, TextareaComponent, ThemeService, TimelineComponent, ToastComponent, ToastService, ToggleGroupComponent, ToolbarComponent, TooltipContentComponent, TooltipDirective, TreeViewComponent, TypographyComponent, TypographyFontFamilyBase, TypographyFontFamilyMono, TypographyFontSize2xl, TypographyFontSize3xl, TypographyFontSize4xl, TypographyFontSize5xl, TypographyFontSize6xl, TypographyFontSizeBase, TypographyFontSizeLg, TypographyFontSizeSm, TypographyFontSizeXl, TypographyFontSizeXs, TypographyFontWeightBold, TypographyFontWeightMedium, TypographyFontWeightNormal, TypographyFontWeightSemibold, TypographyLineHeightNormal, TypographyLineHeightRelaxed, TypographyLineHeightTight, VerificationCodeInputComponent, WaterfallChartComponent, isValidIconName, resolveFileIcon };
16825
+ export { AccordionComponent, AccordionContentDirective, AccordionGroupComponent, AccordionHeaderDirective, AlertComponent, AnimationDurationFast, AnimationEasingEaseIn, AnimationEasingEaseInOut, AnimationEasingEaseOut, AreaChartComponent, AvatarComponent, AvatarGroupComponent, BadgeComponent, BarChartComponent, BorderRadius2xl, BorderRadiusFull, BorderRadiusLg, BorderRadiusMd, BorderRadiusNone, BorderRadiusSm, BorderRadiusXl, BreadcrumbsComponent, ButtonComponent, CalendarComponent, CalloutComponent, CardComponent, ChatComponent, CheckboxComponent, ChipComponent, CodeBlockComponent, ColorAccentOrange, ColorAccentPurple, ColorAccentRed, ColorAccentRust, ColorAccentViolet, ColorBackgroundDark, ColorErrorDark, ColorErrorDefault, ColorErrorLight, ColorInfoDark, ColorInfoDefault, ColorInfoLight, ColorNeutral100, ColorNeutral200, ColorNeutral300, ColorNeutral400, ColorNeutral50, ColorNeutral500, ColorNeutral600, ColorNeutral700, ColorNeutral800, ColorNeutral900, ColorPickerComponent, ColorPrimary100, ColorPrimary200, ColorPrimary300, ColorPrimary400, ColorPrimary50, ColorPrimary500, ColorPrimary600, ColorPrimary700, ColorPrimary800, ColorPrimary900, ColorSecondary100, ColorSecondary200, ColorSecondary300, ColorSecondary400, ColorSecondary50, ColorSecondary500, ColorSecondary600, ColorSecondary700, ColorSecondary800, ColorSecondary900, ColorSidebarDark, ColorSuccessDark, ColorSuccessDefault, ColorSuccessLight, ColorSurfaceDarkBase, ColorSurfaceDarkRaised, ColorSurfaceDarkSunken, ColorTextDarkPrimary, ColorTextDarkSecondary, ColorTextDarkTertiary, ColorWarningDark, ColorWarningDefault, ColorWarningLight, ComboboxComponent, ConfirmDialogComponent, ConfirmService, ContainerComponent, DateRangePickerComponent, DatepickerComponent, DependencyViewerComponent, DescriptionListComponent, DiffViewerComponent, DividerComponent, DocumentViewerComponent, DonutChartComponent, DrawerComponent, Elevation1, Elevation2, Elevation3, Elevation4, EmailInputComponent, EmptyStateComponent, ErrorDisplayComponent, FILE_FALLBACK_ICON, FOLDER_ICON, FOLDER_OPEN_ICON, FieldGroupComponent, FileUploadComponent, FilterBarComponent, FooterComponent, FunnelChartComponent, GalleryComponent, GanttChartComponent, GaugeComponent, HeaderComponent, HeatmapComponent, HeroComponent, ICON_ALIASES, ICON_NAMES, IconComponent, InputComponent, KanbanBoardComponent, LC_LOGO_BASE_PATH, LineChartComponent, ListComponent, ListItemTemplateDirective, LogViewerComponent, LogoComponent, MarkdownComponent, MenuComponent, ModalComponent, NotificationCenterComponent, NumberInputComponent, PageHeaderComponent, PageLayoutComponent, PaginationComponent, PasswordInputComponent, PieChartComponent, PipelineComponent, PopoverComponent, ProgressBarComponent, ProgressRingComponent, RadarChartComponent, RadioComponent, RatingComponent, RichTextEditorComponent, ScatterPlotComponent, SearchInputComponent, SectionComponent, SelectComponent, SidenavComponent, SizeContentMaxWidth, SizeInteractiveLgFontSize, SizeInteractiveLgHeight, SizeInteractiveLgPadding, SizeInteractiveMdFontSize, SizeInteractiveMdHeight, SizeInteractiveMdPadding, SizeInteractiveSmFontSize, SizeInteractiveSmHeight, SizeInteractiveSmPadding, SizeInteractiveXsFontSize, SizeInteractiveXsHeight, SizeInteractiveXsPadding, SizeMinTouchHeight, SizeMinTouchWidth, SkeletonComponent, SliderComponent, SpacerComponent, Spacing0, Spacing05, Spacing1, Spacing10, Spacing11, Spacing12, Spacing14, Spacing15, Spacing16, Spacing2, Spacing25, Spacing3, Spacing35, Spacing4, Spacing5, Spacing6, Spacing7, Spacing8, Spacing9, SparklineComponent, SpinnerComponent, SplitPaneComponent, StackComponent, StackedBarChartComponent, StageListComponent, StatTrendComponent, StepperComponent, SwitchComponent, TabComponent, TableCellDirective, TableComponent, TabsComponent, TagInputComponent, TextareaComponent, ThemeService, TimelineComponent, ToastComponent, ToastService, ToggleGroupComponent, ToolbarComponent, TooltipContentComponent, TooltipDirective, TreeViewComponent, TypographyComponent, TypographyFontFamilyBase, TypographyFontFamilyMono, TypographyFontSize2xl, TypographyFontSize3xl, TypographyFontSize4xl, TypographyFontSize5xl, TypographyFontSize6xl, TypographyFontSizeBase, TypographyFontSizeLg, TypographyFontSizeSm, TypographyFontSizeXl, TypographyFontSizeXs, TypographyFontWeightBold, TypographyFontWeightMedium, TypographyFontWeightNormal, TypographyFontWeightSemibold, TypographyLineHeightNormal, TypographyLineHeightRelaxed, TypographyLineHeightTight, VerificationCodeInputComponent, WaterfallChartComponent, isValidIconName, resetIconWarnings, resolveFileIcon };
16734
16826
  //# sourceMappingURL=life-cockpit-angular-ui-kit.mjs.map