UNPKG

@egjs/grid

Version:

A component that can arrange items according to the type of grids

219 lines (218 loc) 9.95 kB
/** * egjs-grid * Copyright (c) 2021-present NAVER Corp. * MIT license */ import Grid from "../Grid"; import { PROPERTY_TYPE } from "../consts"; import { GridOptions, GridOutlines, Properties } from "../types"; import { GridItem } from "../GridItem"; /** * @typedef * @memberof Grid.JustifiedGrid * @extends Grid.GridOptions */ export interface JustifiedGridOptions extends GridOptions { /** * The minimum and maximum number of items per line. * <ko> 한 줄에 들어가는 아이템의 최소, 최대 개수.</ko> * @default [1, 8] */ columnRange?: number | number[] | ((self: JustifiedGrid) => number | number[]); /** * The minimum and maximum number of rows in a group, 0 is not set. * <ko> 한 그룹에 들어가는 행의 최소, 최대 개수, 0은 미설정이다.</ko> * @default 0 */ rowRange?: number | number[]; /** * The minimum and maximum size by which the item is adjusted. If it is not calculated, it may deviate from the minimum and maximum sizes. * <ko>아이템이 조정되는 최소, 최대 사이즈. 계산이 되지 않는 경우 최소, 최대 사이즈를 벗어날 수 있다.</ko> * @default [0, Infinity] */ sizeRange?: number | number[]; /** * Maximum number of rows to be counted for container size. You can hide it on the screen by setting overflow: hidden. -1 is not set. * <ko>컨테이너 크기에 계산될 최대 row 개수. overflow: hidden을 설정하면 화면에 가릴 수 있다. -1은 미설정이다.</ko> * @default -1 */ displayedRow?: number; /** * Whether to crop when the row size is out of sizeRange. If set to true, this ratio can be broken. * <ko>row사이즈가 sizeRange에 벗어나면 크롭할지 여부. true로 설정하면 비율이 깨질 수 있다.</ko> * @default false */ isCroppedSize?: boolean; /** * The ratio is maintained except for the offset value in the inline direction. If 'data-grid-inline-offset' is set in the element of each item, it will be applied first. * <ko>inline 방향의 offset 수치 만큼 제외하고 비율을 유지한다. 각 아이템의 element에 'data-grid-inline-offset' 을 설정하면 우선 적용한다.</ko> * @default 0 */ inlineOffset?: number; /** * The ratio is maintained except for the offset value in the content direction. If 'data-grid-content-offset' is set in the element or JSX of each item, it will be applied first. * <ko>content 방향의 offset 수치 만큼 제외하고 비율을 유지한다. 각 아이템의 Element 또는 JSX에 'data-grid-content-offset' 을 설정하면 우선 적용한다.</ko> * @default 0 */ contentOffset?: number; /** * it is possible to basically break the proportion of the item and stretch the inline size to fill the container. * If you set the `sizeRange` range narrowly, you can stretch well. * <ko>기본적으로 아이템의 비율을 깨서 inline size를 stretch하여 container를 꽉 채우게 가능하다. sizeRange의 범위를 좁게 설정하면 stretch가 잘 될 수 있다. </ko> * @default false */ stretch?: boolean; /** * If `-`, `+`, or `%` are added as a string value, it is a relative value to the original size. If it is a number value, the stretch range can be set as an absolute value. * If `data-grid-min-stretch` and `data-grid-max-stretch` are set in the Element or JSX of each item, they will be applied first. * <ko>string 값으로 `-`, `+`, `%`이 붙으면 원본 크기에 대한 상대값이며 number 값으로 들어오면 절대 값으로 stretch 범위를 설정할 수 있습니다. * 각 아이템의 Element 또는 JSX에 `data-grid-min-stretch`, `data-grid-max-stretch`을 설정하면 우선 적용한다.</ko> * @ * @default ["-10%", "+10%"] */ stretchRange?: Array<string | number>; /** * Items placed in the last row are not stretched and are drawn maintaining their proportions. When using InfiniteGrid, it is calculated and re-rendered as follows: * <ko>마지막 row에 배치되는 아이템들 경우 stretch되지 않고 비율유지한채로 그려진다. InfiniteGrid를 사용하는 경우 다음 그룹과 같이 계산되어 재렌더링한다.</ko> */ passUnstretchRow?: boolean; } /** * 'justified' is a printing term with the meaning that 'it fits in one row wide'. JustifiedGrid is a grid that the item is filled up on the basis of a line given a size. * If 'data-grid-inline-offset' or 'data-grid-content-offset' are set for item element, the ratio is maintained except for the offset value. * If 'data-grid-maintained-target' is set for an element whose ratio is to be maintained, the item is rendered while maintaining the ratio of the element. * @ko 'justified'는 '1행의 너비에 맞게 꼭 들어찬'이라는 의미를 가진 인쇄 용어다. JustifiedGrid는 용어의 의미대로 너비가 주어진 사이즈를 기준으로 아이템가 가득 차도록 배치하는 Grid다. * 아이템 엘리먼트에 'data-grid-inline-offset' 또는 'data-grid-content-offset'를 설정하면 offset 값을 제외하고 비율을 유지한다. * 비율을 유지하고 싶은 엘리먼트에 'data-grid-maintained-target'을 설정한다면 해당 엘리먼트의 비율을 유지하면서 아이템이 렌더링이 된다. * @memberof Grid * @param {HTMLElement | string} container - A base element for a module <ko>모듈을 적용할 기준 엘리먼트</ko> * @param {Grid.JustifiedGrid.JustifiedGridOptions} options - The option object of the JustifiedGrid module <ko>JustifiedGrid 모듈의 옵션 객체</ko> */ export declare class JustifiedGrid extends Grid<JustifiedGridOptions> { static propertyTypes: { columnRange: PROPERTY_TYPE; rowRange: PROPERTY_TYPE; sizeRange: PROPERTY_TYPE; isCroppedSize: PROPERTY_TYPE; displayedRow: PROPERTY_TYPE; stretch: PROPERTY_TYPE; stretchRange: PROPERTY_TYPE; passUnstretchRow: PROPERTY_TYPE; inlineMargin: PROPERTY_TYPE; contentMargin: PROPERTY_TYPE; inlineOffset: PROPERTY_TYPE; contentOffset: PROPERTY_TYPE; gap: PROPERTY_TYPE; defaultDirection: PROPERTY_TYPE; renderOnPropertyChange: PROPERTY_TYPE; preserveUIOnDestroy: PROPERTY_TYPE; useFit: PROPERTY_TYPE; outlineSize: PROPERTY_TYPE; outlineLength: PROPERTY_TYPE; }; static defaultOptions: Required<JustifiedGridOptions>; applyGrid(items: GridItem[], direction: "start" | "end", outline: number[]): GridOutlines; private _getRowPath; private _getRowLink; private _searchRowLink; private _getExpectedRowSize; private _getExpectedInlineSizes; private _getStretchItemInfos; private _getExpectedInlineSize; private _getCost; private _getPath; private _setStyle; getComputedOutlineLength(): number; getComputedOutlineSize(): number; private _getRowRange; private _getColumnRange; private _getSizeRange; } export interface JustifiedGrid extends Properties<typeof JustifiedGrid> { } /** * The minimum and maximum number of items per line. * @ko 한 줄에 들어가는 아이템의 최소, 최대 개수. * @name Grid.JustifiedGrid#columnRange * @type {$ts:Grid.JustifiedGrid.JustifiedGridOptions["columnRange"]} * @default [1, 8] * @example * ```js * import { JustifiedGrid } from "@egjs/grid"; * * const grid = new JustifiedGrid(container, { * columnRange: [1, 8], * }); * * grid.columnRange = [3, 6]; * ``` */ /** * The minimum and maximum number of rows in a group, 0 is not set. * @ko 한 그룹에 들어가는 행의 최소, 최대 개수, 0은 미설정이다. * @name Grid.JustifiedGrid#rowRange * @type {$ts:Grid.JustifiedGrid.JustifiedGridOptions["rowRange"]} * @default 0 * @example * ```js * import { JustifiedGrid } from "@egjs/grid"; * * const grid = new JustifiedGrid(container, { * rowRange: 0, * }); * * grid.rowRange = [3, 4]; * ``` */ /** * The minimum and maximum size by which the item is adjusted. If it is not calculated, it may deviate from the minimum and maximum sizes. * @ko 아이템이 조정되는 최소, 최대 사이즈. 계산이 되지 않는 경우 최소, 최대 사이즈를 벗어날 수 있다. * @name Grid.JustifiedGrid#sizeRange * @type {$ts:Grid.JustifiedGrid.JustifiedGridOptions["sizeRange"]} * @default [0, Infinity] * @example * ```js * import { JustifiedGrid } from "@egjs/grid"; * * const grid = new JustifiedGrid(container, { * sizeRange: [0, Infinity], * }); * * grid.sizeRange = [200, 800]; * ``` */ /** * Maximum number of rows to be counted for container size. You can hide it on the screen by setting overflow: hidden. -1 is not set. * @ko - 컨테이너 크기에 계산될 최대 row 개수. overflow: hidden을 설정하면 화면에 가릴 수 있다. -1은 미설정이다. * @name Grid.JustifiedGrid#displayedRow * @type {$ts:Grid.JustifiedGrid.JustifiedGridOptions["displayedRow"]} * @default -1 * @example * ```js * import { JustifiedGrid } from "@egjs/grid"; * * const grid = new JustifiedGrid(container, { * displayedRow: -1, * }); * * grid.displayedRow = 3; * ``` */ /** * Whether to crop when the row size is out of sizeRange. If set to true, this ratio can be broken. * @ko - row 사이즈가 sizeRange에 벗어나면 크롭할지 여부. true로 설정하면 비율이 깨질 수 있다. * @name Grid.JustifiedGrid#isCroppedSize * @type {$ts:Grid.JustifiedGrid.JustifiedGridOptions["isCroppedSize"]} * @default false * @example * ```js * import { JustifiedGrid } from "@egjs/grid"; * * const grid = new JustifiedGrid(container, { * sizeRange: [200, 250], * isCroppedSize: false, * }); * * grid.isCroppedSize = true; * ``` */