{"version":3,"file":"omnidyon-ngx-snippets.mjs","sources":["../../../projects/ngx-snippets/src/lib/services/copy.service.ts","../../../projects/ngx-snippets/src/lib/components/number-line/number-line.component.ts","../../../projects/ngx-snippets/src/lib/components/number-line/number-line.component.html","../../../projects/ngx-snippets/src/lib/directives/code-handler/code-handler.directive.ts","../../../projects/ngx-snippets/src/lib/directives/tokenizer-directives/code-tokenizer.directive.ts","../../../projects/ngx-snippets/src/lib/tokenizer/utils/regexp.ts","../../../projects/ngx-snippets/src/lib/tokenizer/tokenizers/base-tokenizer.ts","../../../projects/ngx-snippets/src/lib/tokenizer/tokenizers/html-tokenizer.ts","../../../projects/ngx-snippets/src/lib/tokenizer/tokenizers/tokens/js-ts-tokens.ts","../../../projects/ngx-snippets/src/lib/tokenizer/tokenizers/js-tokenizer.ts","../../../projects/ngx-snippets/src/lib/tokenizer/tokenizers/tokens/css-tokens.ts","../../../projects/ngx-snippets/src/lib/tokenizer/tokenizers/tokens/html-tokens.ts","../../../projects/ngx-snippets/src/lib/tokenizer/tokenizers/css-tokenizer.ts","../../../projects/ngx-snippets/src/lib/services/tokenizer.service.ts","../../../projects/ngx-snippets/src/lib/directives/tokenizer-directives/template-tokenizer.directive.ts","../../../projects/ngx-snippets/src/lib/directives/copy/record-for-copy.directive.ts","../../../projects/ngx-snippets/src/lib/components/snippets/omni-snippets.component.ts","../../../projects/ngx-snippets/src/lib/components/snippets/omni-snippets.component.html","../../../projects/ngx-snippets/src/lib/interfaces/snippet-config.interface.ts","../../../projects/ngx-snippets/src/lib/interfaces/token.interface.ts","../../../projects/ngx-snippets/src/lib/types/index.ts","../../../projects/ngx-snippets/src/public-api.ts","../../../projects/ngx-snippets/src/omnidyon-ngx-snippets.ts"],"sourcesContent":["/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n */\n\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CopyService {\n  private _textToCopy: string = '';\n  private _linesToCope: {[key: string]: string} = {}\n\n  set(text: string): void {\n    this._textToCopy = text;\n  }\n\n  get(): string {\n    return this._textToCopy;\n  }\n\n  add(text: string): void{\n    this._textToCopy += text;\n  }\n\n  setLine(number: number, line: string): void {\n    if(!line) {\n      delete this._linesToCope[number]\n    } else {\n      this._linesToCope[number] = line;\n    }\n    this._textToCopy = Object.values(this._linesToCope).join(`\\n`);\n  }\n\n  toClipboard(): void {\n    navigator.clipboard.writeText(this._textToCopy);\n  }\n}\n","/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n */\n\nimport { NgClass } from '@angular/common';\nimport { Component, ElementRef, Input, Renderer2 } from '@angular/core';\nimport { CopyService } from '../../services/copy.service';\n\n/**\n * @internal\n * @description\n * A component used for showing the line numbers in the gutter as well as handling\n * single line copy functionality\n */\n@Component({\n  selector: 'omni-number-line',\n  imports: [NgClass],\n  templateUrl: './number-line.component.html',\n  styleUrls: [\n    './number-line.component.scss',\n    '../../styles/defaults.scss',\n    '../snippets/omni-snippets.component.scss',\n  ],\n})\nexport class NumberLineComponent {\n  self!: HTMLSpanElement;\n  selected: boolean = false;\n  valueForCopy: string = '';\n\n  @Input() number!: number;\n\n  constructor(\n    private readonly elementRef: ElementRef,\n    private readonly renderer: Renderer2,\n    private readonly copyService: CopyService\n  ) {\n    this.self = this.elementRef.nativeElement;\n  }\n\n  selectLine(): void {\n    this.handleSelect(this.self);\n    this.copyService.setLine(this.number, this.valueForCopy);\n    this.copyService.toClipboard();\n  }\n\n  handleSelect(element: Element): void {\n    this.valueForCopy = '';\n\n    const coordinates = element.getBoundingClientRect();\n    const offset = Math.round(coordinates.width) + 11;\n    const nextInLine: Element = document.elementsFromPoint(\n      coordinates.x + offset,\n      coordinates.y + coordinates.height / 2\n    )[0];\n\n    try {\n      if (nextInLine.hasAttribute('row-num')) {\n        this.setLine(nextInLine);\n      } else if (nextInLine.parentElement) {\n        this.setLine(nextInLine.parentElement);\n      }\n    } catch {\n      throw new Error('Failed to locate the code line');\n    }\n  }\n\n  setLine(element: Element): void {\n    if (element.classList.contains('selected-line')) {\n      this.renderer.removeClass(element, 'selected-line');\n      this.selected = false;\n    } else {\n      this.renderer.addClass(element, 'selected-line');\n      this.setCopyValue(element);\n      this.selected = true;\n    }\n  }\n\n  setCopyValue(element: Element): void {\n    const spans = element.children;\n\n    for (let i = 0; i < spans.length; i++) {\n      this.valueForCopy += spans[i].innerHTML;\n    }\n  }\n}\n","<div class=\"number-line\" [ngClass]=\"{ 'selected-line-number': selected }\">\n  <span\n    class=\"digit\"\n    [ngClass]=\"{ 'selected-digit': selected }\"\n    (click)=\"selectLine()\"\n    >{{ number }}\n  </span>\n</div>\n","/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n */\n\nimport {\n  Directive,\n  ElementRef,\n  inject,\n  Input,\n  OnDestroy,\n  Renderer2,\n  ViewContainerRef,\n} from '@angular/core';\nimport { Token } from '../../interfaces/token.interface';\nimport { CopyService } from '../../services/copy.service';\nimport { NumberLineComponent } from '../../components/number-line/number-line.component';\n\n/**\n * @internal\n * @description\n * A base directive used by both {@link CodeTokenizerDirective} and {@link TemplateTokenizerDirective},\n * responsible, applying  proper styling to the code(mostly coloring), numbering the lines,\n * and handling line focus,\n *\n * For token definition please refer to: https://en.wikipedia.org/wiki/Token#Computing\n */\n@Directive()\nexport abstract class CodeHandlerDirective implements OnDestroy {\n  self!: HTMLPreElement;\n  runningLine!: HTMLDialogElement;\n  lineCount: number = 1;\n  lineNumber: number = 1;\n  unListeners: (() => void)[] = [];\n\n  @Input() lineNumbers!: HTMLDivElement;\n\n  readonly elementRef = inject(ElementRef);\n  readonly renderer = inject(Renderer2);\n  readonly copyService = inject(CopyService);\n  readonly viewContainer = inject(ViewContainerRef);\n\n  constructor(\n  ) {\n    this.self = this.elementRef.nativeElement;\n    this.createLine();\n  }\n\n  handleToken(token: Token): void {\n    if (token.token === `\\n`) {\n      if (this.runningLine.children.length === 0) {\n        this.renderer.setProperty(this.runningLine, 'innerHTML', `\\n`);\n      }\n\n      this.createLine();\n      this.addNumberLine();\n      this.lineNumber++;\n    } else {\n      this.createSpan(token);\n    }\n  }\n\n  createSpan(token: Token): void {\n    if (token.token !== `\\n` && token.token) {\n      const span = this.renderer.createElement('span');\n      this.renderer.setProperty(span, 'innerText', token.token);\n      this.renderer.addClass(span, token.class);\n      this.renderer.appendChild(this.runningLine, span);\n    }\n  }\n\n  addNumberLine(): void {\n    const numberLine = this.viewContainer.createComponent(NumberLineComponent);\n    numberLine.setInput('number', this.lineNumber);\n    this.renderer.appendChild(\n      this.lineNumbers,\n      numberLine.location.nativeElement\n    );\n  }\n\n  clearNumberLines(): void {\n    while (this.lineNumbers.firstChild) {\n      this.renderer.removeChild(this.lineNumbers, this.lineNumbers.lastChild);\n    }\n  }\n\n  createLine(): void {\n    this.runningLine = this.renderer.createElement('div');\n    this.renderer.setAttribute(this.runningLine, 'row-num', this.lineCount.toString());\n    this.renderer.addClass(this.runningLine, 'line');\n    this.unListeners.push(\n      this.renderer.listen(this.runningLine, 'click', (event) =>\n        this.focus(event)\n      )\n    );\n    this.renderer.appendChild(this.self, this.runningLine);\n    this.lineCount++;\n  }\n\n  focus(event: Event): void {\n    const line = (event.target as HTMLElement).parentElement;\n    if (line && line.hasAttribute('row-num')) {\n      if (line.classList.contains('line-focus')) {\n        this.renderer.removeClass(line, 'line-focus');\n      } else {\n        this.clearFocus(line);\n        this.renderer.addClass(line, 'line-focus');\n      }\n    }\n  }\n\n  clearFocus(element: Element): void {\n    const parent = element.parentElement;\n    const divs = parent?.children;\n    if (divs) {\n      for (let i = 0; i < divs?.length; i++) {\n        this.renderer.removeClass(divs[i], 'line-focus');\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.unListeners.forEach((unListener) => unListener());\n  }\n}\n","/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n */\n\nimport { Directive, Input, OnDestroy } from '@angular/core';\nimport { Formats } from '../../types';\nimport { Token } from '../../interfaces/token.interface';\nimport { CodeHandlerDirective } from '../code-handler/code-handler.directive';\n\n/**\n * @internal\n * @description\n * A directive responsible for handling snippets passed a snippets input\n * The {@link OmniSnippetsComponent} preforms the token classification and\n * passes the tokens to this directives for further handling\n */\n@Directive({\n  selector: '[codeTokenizer]',\n})\nexport class CodeTokenizerDirective\n  extends CodeHandlerDirective\n  implements OnDestroy\n{\n  @Input() format: Formats = 'TypeScript';\n  @Input() set tokens(tokens: Token[]) {\n    this.clearNumberLines();\n    tokens.forEach((token) => {\n      this.handleToken(token);\n    });\n    this.addNumberLine();\n  }\n}\n","export const JS_SPLIT = /([\"'`\\t\\n\\v\\f\\r !,.:;{}()\\[\\]])/g;\nexport const HTML_SPLIT = /([/<>=\"\\t\\n\\v\\f\\r ])/g;\nexport const CSS_SPLIT = /([\"'\\t\\n\\v\\f\\r ,:;{}()])/g;\n","import { CommentConfig } from '../../interfaces/comment.interface';\nimport { Token, TokenData } from '../../interfaces/token.interface';\n\nexport abstract class BaseTokenizer {\n  commentConfig!: CommentConfig;\n  abstract splitExpression: RegExp;\n  classifiedTokens: Token[] = [];\n  quoted: boolean = false;\n  commented: boolean = false;\n  comment: boolean = false;\n\n  constructor(commentConfig?: CommentConfig) {\n    this.commentConfig = commentConfig || {\n      commentToken: '//',\n    };\n  }\n\n  parseAndClassify(text: string): Token[] {\n    const tokens = text.split(this.splitExpression);\n\n    tokens.forEach((token, index) => {\n      this.classifiedTokens.push(\n        this.classifyToken({\n          token,\n          nextToken: tokens[index + 1],\n          priorToken: tokens[index - 1],\n          priorPriorToken: tokens[index - 2],\n        })\n      );\n    });\n    return this.classifiedTokens;\n  }\n\n  abstract getClass(tokenData: TokenData): string;\n\n  classifyToken(tokenData: TokenData): Token {\n    return {\n      token: tokenData.token,\n      class:\n        this.isQuoted(tokenData) ||\n        this.isComment(tokenData) ||\n        this.isCommented(tokenData) ||\n        this.getClass(tokenData),\n    };\n  }\n\n  isQuoted(tokenData: TokenData): string | undefined {\n    let quotedClass!: string;\n    if (this.quoted) {\n      quotedClass = 'quoted-token';\n    }\n\n    if (/([\"'`])/g.test(tokenData.token)) {\n      this.quoted = !this.quoted;\n      quotedClass = 'quoted-token';\n    }\n    return quotedClass;\n  }\n\n  isCommented(tokenData: TokenData): string | undefined {\n    let commentClass!: string;\n    if (this.commented) {\n      commentClass = 'comment-token';\n    }\n\n    if (\n      tokenData.token === this.commentConfig.blockToken?.startToken ||\n      tokenData.token === this.commentConfig.blockToken?.endToken\n    ) {\n      this.commented = !this.commented;\n      commentClass = 'comment-token';\n    }\n\n    return commentClass;\n  }\n\n  isComment(tokenData: TokenData): string | undefined {\n    let commentClass!: string;\n    if (tokenData.token === this.commentConfig.commentToken) {\n      this.comment = true;\n      commentClass = 'comment-token';\n    }\n\n    if (this.comment) {\n      if (tokenData.nextToken === `\\n`) {\n        this.comment = false;\n      }\n      commentClass = 'comment-token';\n    }\n\n    return commentClass;\n  }\n}\n","import { TokenData } from '../../interfaces/token.interface';\nimport { HTML_SPLIT } from '../utils/regexp';\nimport { BaseTokenizer } from './base-tokenizer';\n\nconst COMMENT_CONFIG = {\n  blockToken: {\n    startToken: '!--',\n    endToken: '--',\n  },\n};\n\nexport class HTMLTokenizer extends BaseTokenizer {\n  splitExpression = HTML_SPLIT;\n\n  constructor() {\n    super(COMMENT_CONFIG);\n  }\n\n  getClass(tokenData: TokenData): string {\n    if (this.isQuoted(tokenData)) {\n      this.quoted = !this.quoted;\n    }\n\n    if (this.quoted || this.isQuoted(tokenData)) {\n      return 'quoted-token';\n    } else if (this.isMark(tokenData)) {\n      return 'kc-token';\n    } else if (this.isElementName(tokenData)) {\n      return 'element-token';\n    } else if (this.isAttribute(tokenData)) {\n      return 'attribute-token';\n    } else {\n      return 'text-token';\n    }\n  }\n\n  isElementName(tokenData: TokenData): boolean {\n    return (\n      (tokenData.priorToken === '<' || tokenData.priorToken === '/') &&\n      (tokenData.nextToken === ' ' || tokenData.nextToken === '>')\n    );\n  }\n\n  isAttribute(tokenData: TokenData): boolean {\n    return (\n      tokenData.nextToken === '=' ||\n      (tokenData.nextToken === '>' &&\n        tokenData.priorToken === ' ' &&\n        tokenData.priorPriorToken !== '/')\n    );\n  }\n\n  isMark(tokenData: TokenData): boolean {\n    return /([<>=/])/g.test(tokenData.token);\n  }\n}\n","export const KEYWORD_TOKENS_A = [\n  'abstract',\n  'async',\n  'await',\n  'break',\n  'case',\n  'catch',\n  'delete',\n  'else',\n  'export',\n  'extends',\n  'for',\n  'from',\n  'if',\n  'import',\n  'instanceof',\n  'in',\n  'keyof',\n  'new',\n  'of',\n  'return',\n  'switch',\n  'throw',\n  'typeof',\n  'try',\n];\n\nexport const KEYWORD_TOKENS_B = [\n  'arguments',\n  // 'constructor',\n  'continue',\n  'debugger',\n  'default',\n  'do',\n  'enum ',\n  'eval',\n  'final',\n  'finally',\n  'function',\n  'goto',\n  'native',\n  'protected',\n  'short',\n  'super',\n  'synchronized',\n  'this',\n  'transient',\n  'volatile',\n  'while',\n  'with',\n];\n\nexport const KEYWORD_TOKENS_C = [\n  'as',\n  'class',\n  'const',\n  'implements',\n  'interface',\n  'let',\n  'navigator',\n  'package',\n  'private',\n  'public',\n  'readonly',\n  'static',\n  'var',\n  'yield',\n  'window',\n];\n\nexport const OPERATOR_TOKENS = [\n  '=',\n  '==',\n  '===',\n  '>',\n  '<',\n  '>=',\n  '<=',\n  '=>',\n  '+',\n  '++',\n  '+=',\n  '-',\n  '--',\n  '-=',\n  '*',\n  '*=',\n  '/',\n  '/=',\n  '&&',\n  '||',\n];\n\nexport const KEYWORD_TOKENS_D = ['false', 'true'];\n\nexport const DATA_TYPE_TOKENS = [\n  'boolean',\n  'string',\n  'number',\n  'void',\n  'null',\n  'never',\n  'unknown',\n  'any',\n];\n","import { TokenData } from '../../interfaces/token.interface';\nimport { JS_SPLIT } from '../utils/regexp';\nimport { BaseTokenizer } from './base-tokenizer';\nimport {\n  DATA_TYPE_TOKENS,\n  KEYWORD_TOKENS_A,\n  KEYWORD_TOKENS_B,\n  KEYWORD_TOKENS_C,\n  OPERATOR_TOKENS,\n} from './tokens/js-ts-tokens';\n\nconst COMMENT_CONFIG = {\n  commentToken: '//',\n  blockToken: {\n    startToken: '/**',\n    endToken: '*/',\n  },\n}\n\nexport class JSTokenizer extends BaseTokenizer {\n  splitExpression = JS_SPLIT;\n  scopeLevelRound: number = 1;\n  scopeLevelSquare: number = 1;\n  scopeLevelCurly: number = 1;\n\n  constructor() {\n    super(COMMENT_CONFIG);\n  }\n\n  getClass(tokenData: TokenData): string {\n    if (this.isSeparatorToken(tokenData)) {\n      return 'separator-token';\n    } else if (tokenData.token === '{') {\n      return `scope-level-${this.scopeLevelCurly++}`;\n    } else if (tokenData.token === '}') {\n      return `scope-level-${--this.scopeLevelCurly}`;\n    } else if (tokenData.token === '(') {\n      return `scope-level-${this.scopeLevelRound++}`;\n    } else if (tokenData.token === ')') {\n      return `scope-level-${--this.scopeLevelRound}`;\n    } else if (tokenData.token === '[') {\n      return `scope-level-${this.scopeLevelSquare++}`;\n    } else if (tokenData.token === ']') {\n      return `scope-level-${--this.scopeLevelSquare}`;\n    } else if (this.isObjectProperty(tokenData)) {\n      return 'property-token';\n    } else if (this.isKeywordToken(tokenData, KEYWORD_TOKENS_A)) {\n      return 'ka-token';\n    } else if (this.isKeywordToken(tokenData, KEYWORD_TOKENS_B)) {\n      return 'kb-token';\n    } else if (this.isKeywordToken(tokenData, KEYWORD_TOKENS_C)) {\n      return 'kc-token';\n    } else if (this.isDataToken(tokenData)) {\n      return 'data-token';\n    } else if (this.isFunctionToken(tokenData)) {\n      return 'function-token';\n    } else if (this.isParameterToken(tokenData)) {\n      return 'parameter-token';\n    } else if (this.isOperatorToken(tokenData)) {\n      return 'operator-token';\n    } else if (/([()])/g.test(tokenData.token)) {\n      return 'var-token';\n    } else {\n      return 'text-token';\n    }\n  }\n\n  isObjectProperty(tokenData: TokenData): boolean {\n    return (\n      tokenData.priorToken === '.' &&\n      (tokenData.nextToken === '.' ||\n        tokenData.nextToken === ')' ||\n        tokenData.nextToken === ',' ||\n        !tokenData.nextToken)\n    );\n  }\n\n  isKeywordToken(tokenData: TokenData, tokenSet: string[]): boolean {\n    return (\n      tokenSet.some((token) => token === tokenData.token) &&\n      tokenData.nextToken !== ':'\n    );\n  }\n\n  isDataToken(tokenData: TokenData): boolean {\n    return (\n      !!(tokenData.priorPriorToken === ':' && tokenData.token) ||\n      DATA_TYPE_TOKENS.some((token) => token === tokenData.token)\n    );\n  }\n\n  isFunctionToken(tokenData: TokenData): boolean {\n    return tokenData.nextToken === '(' && !tokenData.token.includes('/');\n  }\n\n  isParameterToken(tokenData: TokenData): boolean {\n    return tokenData.nextToken !== ')' && tokenData.nextToken === ':';\n  }\n\n  isSeparatorToken(tokenData: TokenData): boolean {\n    return /([!,.:;])/g.test(tokenData.token);\n  }\n\n  isOperatorToken(tokenData: TokenData): boolean {\n    return OPERATOR_TOKENS.some((token) => token === tokenData.token);\n  }\n}\n","export const CSS_TOKENS = [\n  'absolute',\n  'acos',\n  'asin',\n  'atan',\n  'atan2',\n  'attr',\n  'auto',\n  'blur',\n  'brightness',\n  'calc',\n  'circle',\n  'clamp',\n  'color-mix',\n  'color',\n  'column',\n  'conic-gradient',\n  'contrast',\n  'cos',\n  'counter',\n  'counters',\n  'cubic-bezier',\n  'drop-shadow',\n  'ellipse',\n  'exp',\n  'filter',\n  'fit-content',\n  'flex-end',\n  'flex-start',\n  'flex',\n  'grayscale',\n  'hidden',\n  'hsl',\n  'hsla',\n  'hue-rotate',\n  'hwb',\n  'hypot',\n  'initial',\n  'inset',\n  'invert',\n  'lab',\n  'lch',\n  'light-dark',\n  'linear-gradient',\n  'log',\n  'matrix',\n  'matrix3d',\n  'max',\n  'min',\n  'minmax',\n  'mod',\n  'oklab',\n  'oklch',\n  'opacity',\n  'perspective',\n  'pointer',\n  'polygon',\n  'pow',\n  'radial-gradient',\n  'ray',\n  'relative',\n  'rem',\n  'repeat',\n  'repeating-conic-gradient',\n  'repeating-linear-gradient',\n  'repeating-radial-gradient',\n  'rgb',\n  'rgba',\n  'rotate',\n  'rotate3d',\n  'rotateX',\n  'rotateY',\n  'rotateZ',\n  'round',\n  'row',\n  'saturate',\n  'scale',\n  'scale3d',\n  'scaleX',\n  'scaleY',\n  'sepia',\n  'sin',\n  'skew',\n  'skewX',\n  'skewY',\n  'smooth',\n  'solid',\n  'sqrt',\n  'static',\n  'steps',\n  'sticky',\n  'tan',\n  'translate',\n  'translateX',\n  'translateY',\n  'unset',\n  'url',\n  'var',\n  'inherit',\n];\n\nexport const CSS_PROP_TOKENS = [\n  '@charset',\n  '@container',\n  '@counter-style',\n  '@font-face',\n  '@font-palette-values',\n  '@import',\n  '@keyframes',\n  '@layer',\n  '@media',\n  '@namespace',\n  '@page',\n  '@property',\n  '@scope',\n  '@starting-style',\n  '@supports',\n  '!important'\n]\n","export const HTML_TOKENS = [\n  'base',\n  'head',\n  'link',\n  'meta',\n  'style',\n  'title',\n  'body',\n  'address',\n  'article',\n  'aside',\n  'footer',\n  'header',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'hgroup',\n  'main',\n  'nav',\n  'section',\n  'search',\n  'blockquote',\n  'dd',\n  'div',\n  'dl',\n  'dt',\n  'figcaption',\n  'figure',\n  'hr',\n  'li',\n  'menu',\n  'ol',\n  'p',\n  'pre',\n  'ul',\n  'a',\n  'abbr',\n  'b',\n  'bdi',\n  'bdo',\n  'br',\n  'cite',\n  'code',\n  'data',\n  'dfn',\n  'em',\n  'i',\n  'kbd',\n  'mark',\n  'q',\n  'rp',\n  'rt',\n  'ruby',\n  's',\n  'samp',\n  'small',\n  'span',\n  'strong',\n  'sub',\n  'sup',\n  'time',\n  'u',\n  'var',\n  'wbr',\n  'area',\n  'audio',\n  'img',\n  'map',\n  'track',\n  'video',\n  'embed',\n  'fencedframe',\n  'iframe',\n  'object',\n  'picture',\n  'source',\n  'svg',\n  'math',\n  'canvas',\n  'noscript',\n  'script',\n  'del',\n  'ins',\n  'caption',\n  'col',\n  'colgroup',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'tr',\n  'button',\n  'datalist',\n  'fieldset',\n  'form',\n  'input',\n  'label',\n  'legend',\n  'meter',\n  'optgroup',\n  'option',\n  'output',\n  'progress',\n  'select',\n  'textarea',\n  'details',\n  'dialog',\n  'summary',\n  'slot',\n  'template',\n  'acronym',\n  'big',\n  'center',\n  'content',\n  'dir',\n  'font',\n  'frame',\n  'frameset',\n  'image',\n  'marquee',\n  'menuitem',\n  'nobr',\n  'noembed',\n  'noframes',\n  'param',\n  'plaintext',\n  'rb',\n  'rtc',\n  'shadow',\n  'strike',\n  'tt',\n  'xmp',\n];\n","import { TokenData } from '../../interfaces/token.interface';\nimport { CSS_SPLIT } from '../utils/regexp';\nimport { BaseTokenizer } from './base-tokenizer';\nimport { CSS_PROP_TOKENS, CSS_TOKENS } from './tokens/css-tokens';\nimport { HTML_TOKENS } from './tokens/html-tokens';\n\nconst COMMENT_CONFIG = {\n  commentToken: '#',\n}\n\nexport class CSSTokenizer extends BaseTokenizer {\n  splitExpression = CSS_SPLIT;\n  scopeLevelCurly: number = 1;\n  scopeLevelRound: number = 1;\n\n  constructor() {\n    super(COMMENT_CONFIG);\n  }\n\n  getClass(tokenData: TokenData): string {\n    if (this.isQuoted(tokenData)) {\n      this.quoted = !this.quoted;\n    }\n\n    if (this.quoted || this.isQuoted(tokenData)) {\n      return 'quoted-token';\n    } else if (this.isSelector(tokenData)) {\n      return 'selector-token';\n    } else if (tokenData.token === '{') {\n      return `scope-level-${this.scopeLevelCurly++}`;\n    } else if (tokenData.token === '}') {\n      return `scope-level-${--this.scopeLevelCurly}`;\n    } else if (tokenData.token === '(') {\n      return `scope-level-${this.scopeLevelRound++}`;\n    } else if (tokenData.token === ')') {\n      return `scope-level-${--this.scopeLevelRound}`;\n    } else if (this.isElementName(tokenData)) {\n      return 'element-token';\n    } else if (this.isDefinition(tokenData)) {\n      return 'kc-token';\n    } else if (this.isFunction(tokenData)) {\n      return 'function-token';\n    } else if (this.isProp(tokenData)) {\n      return 'css-prop-token';\n    } else if (this.isSeparatorToken(tokenData)) {\n      return 'separator-token';\n    } else {\n      return 'text-token';\n    }\n  }\n\n  isElementName(tokenData: TokenData): boolean {\n    return HTML_TOKENS.includes(tokenData.token) && tokenData.token !== 'var';\n  }\n\n  isSelector(tokenData: TokenData): boolean {\n    return (\n      tokenData.nextToken === '{' ||\n      tokenData.token.startsWith('.') ||\n      tokenData.token.startsWith('#')\n    );\n  }\n\n  isDefinition(tokenData: TokenData): boolean {\n    return tokenData.nextToken === ':';\n  }\n\n  isFunction(tokenData: TokenData): boolean {\n    return CSS_TOKENS.includes(tokenData.token);\n  }\n\n  isProp(tokenData: TokenData): boolean {\n    return CSS_PROP_TOKENS.includes(tokenData.token);\n  }\n\n  isSeparatorToken(tokenData: TokenData): boolean {\n    return /([,.:;])/g.test(tokenData.token);\n  }\n}\n","/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n */\n\nimport { Injectable } from '@angular/core';\nimport { HTMLTokenizer } from '../tokenizer/tokenizers/html-tokenizer';\nimport { JSTokenizer } from '../tokenizer/tokenizers/js-tokenizer';\nimport { Formats } from '../types';\nimport { Token } from '../interfaces/token.interface';\nimport { CSSTokenizer } from '../tokenizer/tokenizers/css-tokenizer';\n\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TokenizerService {\n  formatterMap = new Map<Formats, any>([\n    ['TypeScript', JSTokenizer],\n    ['JavaScript', JSTokenizer],\n    ['HTML', HTMLTokenizer],\n    ['CSS', CSSTokenizer]\n  ]);\n\n  tokenize(text: string, format: Formats): Token[] {\n    text = text.replaceAll('&lt;', '<');\n    text = text.replaceAll('&gt;', '>');\n    text = text.trim();\n    const tokenizer = this.formatterMap.get(format) ?? JSTokenizer;\n    return new tokenizer().parseAndClassify(text);\n  }\n}\n","/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n */\n\nimport {\n  AfterViewInit,\n  Directive,\n  inject,\n  Input,\n  OnDestroy,\n} from '@angular/core';\nimport { Token } from '../../interfaces/token.interface';\nimport { CodeHandlerDirective } from '../code-handler/code-handler.directive';\nimport { Formats } from '../../types';\nimport { TokenizerService } from '../../services/tokenizer.service';\n\n\n/**\n * @internal\n * @description\n * A directive responsible for handling snippets passed through an ng-template\n *\n * For more information on ng-template please visit: https://angular.dev/api/core/ng-template\n */\n@Directive({\n  selector: '[templateTokenizer]',\n})\nexport class TemplateTokenizerDirective\n  extends CodeHandlerDirective\n  implements AfterViewInit, OnDestroy\n{\n  classifiedTokens: Token[] = [];\n\n  @Input() format!: Formats;\n\n  private readonly tokenizerService = inject(TokenizerService);\n\n  ngAfterViewInit(): void {\n    this.classifiedTokens = this.tokenizerService.tokenize(\n      this.self.innerText,\n      this.format\n    );\n    this.self.innerText = '';\n    this.classifiedTokens.forEach((token) => {\n      this.handleToken(token);\n    });\n    this.addNumberLine();\n  }\n}\n","/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n */\n\nimport { AfterViewInit, Directive, ElementRef } from '@angular/core';\nimport { CopyService } from '../../services/copy.service';\n\n@Directive({\n  selector: '[recordForCopy]',\n})\nexport class RecordForCopyDirective implements AfterViewInit {\n  self!: HTMLPreElement;\n  constructor(\n    private copyService: CopyService,\n    private elementRef: ElementRef\n  ) {\n    this.self = this.elementRef.nativeElement;\n  }\n\n  ngAfterViewInit(): void {\n    this.copyService.set(this.self.innerText);\n  }\n}\n","/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n */\n\nimport {\n  Component,\n  ContentChild,\n  Host,\n  Input,\n  Self,\n  TemplateRef,\n} from '@angular/core';\nimport { SnippetConfig } from '../../interfaces/snippet-config.interface';\nimport { Token } from '../../interfaces/token.interface';\nimport { CodeTokenizerDirective } from '../../directives/tokenizer-directives/code-tokenizer.directive';\nimport {\n  NgIf,\n  NgFor,\n  NgSwitch,\n  NgSwitchCase,\n  NgClass,\n  NgTemplateOutlet,\n} from '@angular/common';\nimport { Backlights, Formats, Neons } from '../../types';\nimport { TokenizerService } from '../../services/tokenizer.service';\nimport { CopyService } from '../../services/copy.service';\nimport { TemplateTokenizerDirective } from '../../directives/tokenizer-directives/template-tokenizer.directive';\nimport { RecordForCopyDirective } from '../../directives/copy/record-for-copy.directive';\n\n\n/**\n * @publicApi\n * @description\n * The main component of the library, the actually snippets are being shown from this\n * components view.\n *\n * @usageNotes\n * <omni-snippets\n *  [snippets]=\"exampleSnippets\"  -{@link SnippetConfig}\n *  backlight=\"backlight-Green\"   -{@link Backlights}  effect applied to the snippet\n * ></omni-snippets>\n */\n@Component({\n  selector: 'omni-snippets',\n  imports: [\n    CodeTokenizerDirective,\n    TemplateTokenizerDirective,\n    RecordForCopyDirective,\n    NgIf,\n    NgFor,\n    NgSwitch,\n    NgSwitchCase,\n    NgClass,\n    NgTemplateOutlet,\n  ],\n  providers: [CopyService],\n  templateUrl: './omni-snippets.component.html',\n  styleUrls: [\n    './omni-snippets.component.scss',\n    '../../styles/defaults.scss',\n    '../../styles/tokens.scss',\n    '../../styles/backlight.scss',\n    '../../styles/neon.scss'\n  ],\n})\nexport class OmniSnippetsComponent {\n  _snippets!: SnippetConfig[];\n  tab: string = 'TypeScript';\n  classifiedTokens: Token[][] = [];\n\n  @ContentChild(TemplateRef) template!: TemplateRef<any>;\n\n  constructor(\n    private tokenizerService: TokenizerService,\n    @Host() @Self() private copyService: CopyService\n  ) {}\n\n  @Input() backlight!: Backlights | null;\n  @Input() neon!: Neons;\n  @Input() format: Formats = 'JavaScript';\n  @Input() header: boolean = true;\n\n  @Input() set snippets(snippets: SnippetConfig[]) {\n    this._snippets = snippets;\n    this.tab = snippets[0].format;\n    this.copyService.set(snippets[0].template);\n    snippets.forEach((snippet) => {\n      this.classifiedTokens.push(\n        this.tokenizerService.tokenize(snippet.template, snippet.format)\n      );\n    });\n  }\n\n  switchSnippet(tab: string, i: number): void {\n    this.tab = tab;\n    this.copyService.set(this._snippets[i].template);\n  }\n\n  copySnippet(): void {\n    this.copyService.toClipboard();\n  }\n}\n","<div [ngClass]=\"{\n    'backlight-rgb': backlight === 'backlight-RGB',\n    'backlight-blue': backlight === 'backlight-Blue',\n    'backlight-orange': backlight === 'backlight-Orange',\n    'backlight-green': backlight === 'backlight-Green',\n    'backlight-red': backlight === 'backlight-Red'\n  }\">\n  <div class=\"snippets-content\">\n    <div class=\"snippets-header\" *ngIf=\"header; else copyBlock\">\n      <div *ngFor=\"let snippet of _snippets; let i = index\">\n        <div class=\"snippet-tab\" [ngClass]=\"{\n            'active-tab': tab === snippet.format\n          }\" (click)=\"switchSnippet(snippet.format, i)\">\n          {{ snippet.format }}\n        </div>\n      </div>\n      <div class=\"snippet-tab copy-tab\" (click)=\"copySnippet()\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\">\n          <path />\n        </svg>\n      </div>\n    </div>\n    <ng-template #copyBlock>\n      <div class=\"copy-button\" (click)=\"copySnippet()\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\">\n          <path />\n        </svg>\n      </div>\n    </ng-template>\n    <div class=\"snippets\" *ngIf=\"_snippets; else templateBlock\">\n      <div\n        class=\"snippets-gutter\"\n        [ngClass]=\"{\n          'gutter-neon-blue': neon === 'neon-Blue',\n          'gutter-neon-green': neon === 'neon-Green',\n          'gutter-neon-red': neon === 'neon-Red',\n          'gutter-neon-orange': neon === 'neon-Orange'\n        }\"\n        #lineNumbers></div>\n      <div\n        class=\"snippets-code-lines\"\n        [ngClass]=\"{\n          'header-neon-blue': neon === 'neon-Blue',\n          'header-neon-green': neon === 'neon-Green',\n          'header-neon-red': neon === 'neon-Red',\n          'header-neon-orange': neon === 'neon-Orange'\n        }\">\n        <div *ngIf=\"_snippets?.length\">\n          <div *ngFor=\"let snippet of _snippets; let i = index\" [ngSwitch]=\"snippet.format\">\n            <pre codeTokenizer [lineNumbers]=\"lineNumbers\" [format]=\"snippet.format\" [tokens]=\"classifiedTokens[i]\"\n              *ngSwitchCase=\"tab\"></pre>\n          </div>\n        </div>\n      </div>\n    </div>\n    <ng-template #templateBlock>\n      <div class=\"snippets\">\n        <div\n          class=\"snippets-gutter\"\n          [ngClass]=\"{\n            'gutter-neon-blue': neon === 'neon-Blue',\n            'gutter-neon-green': neon === 'neon-Green',\n            'gutter-neon-red': neon === 'neon-Red',\n            'gutter-neon-orange': neon === 'neon-Orange'\n          }\"\n          #lineNumbers></div>\n        <div\n          class=\"snippets-code-lines\"\n          [ngClass]=\"{\n            'header-neon-blue': neon === 'neon-Blue',\n            'header-neon-green': neon === 'neon-Green',\n            'header-neon-red': neon === 'neon-Red',\n            'header-neon-orange': neon === 'neon-Orange'\n          }\">\n          <pre recordForCopy templateTokenizer [lineNumbers]=\"lineNumbers\">\n            <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n          </pre>\n        </div>\n      </div>\n    </ng-template>\n  </div>\n</div>\n","/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n */\n\nimport { Formats } from '../types';\n\n/**\n * @internal\n * @description\n * An interface representing a snippet configuration used to assign the proper\n * tokenizer to a snippet\n */\nexport interface SnippetConfig {\n  template: string;\n  format: Formats;\n}\n","/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n */\n\n/**\n * @internal\n * @description\n * An interface representing a classified code token\n */\nexport interface Token {\n  token: string;\n  class: string;\n}\n\n/**\n * @internal\n * @description\n * An interface representing a not classified code token used to preform\n * token classification\n */\nexport interface TokenData {\n  token: string;\n  priorToken?: string;\n  priorPriorToken?: string;\n  nextToken?: string;\n  secondNextToken?: string;\n}\n","/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n */\n\n/**\n * @publicApi\n * @description\n * Type representing supported code languages\n */\nexport type Formats = 'JavaScript' | 'TypeScript' | 'HTML' | 'CSS';\n\n/**\n * @publicApi\n *  Type representing available backlight effects\n */\nexport type Backlights =\n  | 'backlight-RGB'\n  | 'backlight-Blue'\n  | 'backlight-Orange'\n  | 'backlight-Green'\n  | 'backlight-Red';\n\nexport type Neons =\n  | 'neon-RGB'\n  | 'neon-Blue'\n  | 'neon-Orange'\n  | 'neon-Green'\n  | 'neon-Red';\n","/**\n * @license\n * Copyright Slavko Mihajlovic All Rights Reserved.\n *\n * Use of this source code is governed by an ISC-style license that can be\n * found at https://www.isc.org/licenses/\n * \n * Public API Surface of ngx-snippets\n */\n\nexport * from './lib/components/snippets/omni-snippets.component';\nexport * from './lib/interfaces/snippet-config.interface';\nexport * from './lib/interfaces/token.interface';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CopyService","COMMENT_CONFIG","i1.TokenizerService","i2.CopyService"],"mappings":"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"}