{"version":3,"sources":["../../src/layouts/area-grid.ts"],"names":[],"mappings":"AAyCO,MAAM,cAA0C,CAAA;AAAA,EACrD,IAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA;AAAA,EAEA,eAAe,KAAoB,EAAA;AACjC,IAAA,IAAA,CAAK,IAAO,GAAA,iBAAA;AACZ,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACb,IAAA,IAAA,CAAK,UAAU,EAAC;AAAA;AAClB,EAEA,OAAO,KAAK,OAAwC,EAAA;AAClD,IAAA,MAAM,MAAS,GAAA,IAAI,cAAe,CAAA,GAAG,QAAQ,KAAK,CAAA;AAClD,IAAO,MAAA,CAAA,MAAA,CAAO,QAAQ,OAAO,CAAA;AAC7B,IAAO,OAAA,MAAA;AAAA;AACT,EAEA,kBAAkB,KAAgB,EAAA;AAChC,IAAA,IAAA,CAAK,aAAgB,GAAA,KAAA;AACrB,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,eAAe,KAAgB,EAAA;AAC7B,IAAA,IAAA,CAAK,UAAa,GAAA,KAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,gBAAgB,KAAoB,EAAA;AAClC,IAAA,IAAA,CAAK,WAAc,GAAA,KAAA;AACnB,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,YAAY,KAAoB,EAAA;AAC9B,IAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,GAAG,KAAK,CAAA;AACxB,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,cAAc,KAA4B,EAAA;AACxC,IAAK,IAAA,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAG,KAAK,CAAA;AAC1B,IAAO,OAAA,IAAA;AAAA;AAEX;AAuCO,MAAM,QAA8B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzC,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAA;AAAA,EAEA,WAAA,CAAY,KAAmB,GAAA,EAAI,EAAA;AACjC,IAAO,MAAA,CAAA,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA;AAC3B,EAEA,UAAA,CAAW,OAAe,IAAe,EAAA;AACvC,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA;AACd,IAAA,IAAA,CAAK,UAAa,GAAA,IAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,eAAe,KAAe,EAAA;AAC5B,IAAA,IAAA,CAAK,UAAa,GAAA,KAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,SAAS,KAAe,EAAA;AACtB,IAAA,IAAA,CAAK,IAAO,GAAA,KAAA;AACZ,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,OAAA,CAAQ,OAAe,IAAe,EAAA;AACpC,IAAA,IAAA,CAAK,GAAM,GAAA,KAAA;AACX,IAAA,IAAA,CAAK,OAAU,GAAA,IAAA;AACf,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,YAAY,KAAe,EAAA;AACzB,IAAA,IAAA,CAAK,OAAU,GAAA,KAAA;AACf,IAAO,OAAA,IAAA;AAAA;AAEX","file":"area-grid.mjs","sourcesContent":["import { Spacing, TargetWidth } from '../common';\n\n/**\n * A layout that divides a container into named areas into which elements can be placed.\n */\nexport interface IAreaGridLayout {\n  type: 'Layout.AreaGrid';\n\n  /**\n   * The areas in the grid layout.\n   */\n  areas: IGridArea[];\n\n  /**\n   * The columns in the grid layout, defined as a percentage of the available width or in pixels using the <number>px format.\n   */\n  columns: (number | string)[];\n\n  /**\n   * The space between columns.\n   * @default `default`\n   */\n  columnSpacing?: Spacing;\n\n  /**\n   * The space between rows.\n   * @default `default`\n   */\n  rowSpacing?: Spacing;\n\n  /**\n   * Controls for which card width the layout should be used.\n   */\n  targetWidth?: TargetWidth;\n}\n\nexport type AreaGridLayoutOptions = Omit<IAreaGridLayout, 'type' | 'areas' | 'columns'>;\n\n/**\n * A layout that divides a container into named areas into which elements can be placed.\n */\nexport class AreaGridLayout implements IAreaGridLayout {\n  type: 'Layout.AreaGrid';\n\n  /**\n   * The areas in the grid layout.\n   */\n  areas: IGridArea[];\n\n  /**\n   * The columns in the grid layout, defined as a percentage of the available width or in pixels using the <number>px format.\n   */\n  columns: (number | string)[];\n\n  /**\n   * The space between columns.\n   * @default `default`\n   */\n  columnSpacing?: Spacing;\n\n  /**\n   * The space between rows.\n   * @default `default`\n   */\n  rowSpacing?: Spacing;\n\n  /**\n   * Controls for which card width the layout should be used.\n   */\n  targetWidth?: TargetWidth;\n\n  constructor(...areas: IGridArea[]) {\n    this.type = 'Layout.AreaGrid';\n    this.areas = areas;\n    this.columns = [];\n  }\n\n  static from(options: Omit<IAreaGridLayout, 'type'>) {\n    const layout = new AreaGridLayout(...options.areas);\n    Object.assign(layout, options);\n    return layout;\n  }\n\n  withColumnSpacing(value: Spacing) {\n    this.columnSpacing = value;\n    return this;\n  }\n\n  withRowSpacing(value: Spacing) {\n    this.rowSpacing = value;\n    return this;\n  }\n\n  withTargetWidth(value: TargetWidth) {\n    this.targetWidth = value;\n    return this;\n  }\n\n  addAreas(...value: IGridArea[]) {\n    this.areas.push(...value);\n    return this;\n  }\n\n  addColumns(...value: (number | string)[]) {\n    this.columns.push(...value);\n    return this;\n  }\n}\n\n/**\n * Defines an area in a Layout.AreaGrid layout.\n */\nexport interface IGridArea {\n  /**\n   * The start column index of the area. Column indices start at 1.\n   * @default 1\n   */\n  column?: number;\n\n  /**\n   * Defines how many columns the area should span.\n   * @default 1\n   */\n  columnSpan?: number;\n\n  /**\n   * The name of the area. To place an element in this area, set its grid.area property to match the name of the area.\n   */\n  name?: string;\n\n  /**\n   * The start row index of the area. Row indices start at 1.\n   * @default 1\n   */\n  row?: number;\n\n  /**\n   * Defines how many rows the area should span.\n   * @default 1\n   */\n  rowSpan?: number;\n}\n\n/**\n * Defines an area in a Layout.AreaGrid layout.\n */\nexport class GridArea implements IGridArea {\n  /**\n   * The start column index of the area. Column indices start at 1.\n   * @default 1\n   */\n  column?: number;\n\n  /**\n   * Defines how many columns the area should span.\n   * @default 1\n   */\n  columnSpan?: number;\n\n  /**\n   * The name of the area. To place an element in this area, set its grid.area property to match the name of the area.\n   */\n  name?: string;\n\n  /**\n   * The start row index of the area. Row indices start at 1.\n   * @default 1\n   */\n  row?: number;\n\n  /**\n   * Defines how many rows the area should span.\n   * @default 1\n   */\n  rowSpan?: number;\n\n  constructor(value: IGridArea = {}) {\n    Object.assign(this, value);\n  }\n\n  withColumn(value: number, span?: number) {\n    this.column = value;\n    this.columnSpan = span;\n    return this;\n  }\n\n  withColumnSpan(value: number) {\n    this.columnSpan = value;\n    return this;\n  }\n\n  withName(value: string) {\n    this.name = value;\n    return this;\n  }\n\n  withRow(value: number, span?: number) {\n    this.row = value;\n    this.rowSpan = span;\n    return this;\n  }\n\n  withRowSpan(value: number) {\n    this.rowSpan = value;\n    return this;\n  }\n}\n"]}