ember-headless-table 1.4.0 → 1.4.2

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.
@@ -2,6 +2,7 @@ import { expectTypeOf } from 'expect-type';
2
2
  import '../../plugins/-private/base.js';
3
3
  import { ColumnReordering } from '../../plugins/column-reordering/plugin.js';
4
4
  import '../../plugins/column-resizing/handle.js';
5
+ import '@ember/template';
5
6
  import { ColumnResizing } from '../../plugins/column-resizing/plugin.js';
6
7
  import { Sorting } from '../../plugins/data-sorting/plugin.js';
7
8
  import '../../plugins/data-sorting/types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"table-api.test.js","sources":["../../../src/-private/-type-tests/table-api.test.ts"],"sourcesContent":["import { expectTypeOf } from 'expect-type';\n\nimport { ColumnReordering } from '../../plugins/column-reordering';\nimport { ColumnResizing } from '../../plugins/column-resizing';\nimport { DataSorting } from '../../plugins/data-sorting';\n\nimport type { Table } from '[public-types]';\n\n// We're testing types, not behaviors\nconst x = 0 as unknown as Table<{ x: number }>;\n\n//////////////////////////////\n// <Table>#pluginOf\nexpectTypeOf(x.pluginOf(DataSorting)).toEqualTypeOf<DataSorting | undefined>();\nexpectTypeOf(x.pluginOf(ColumnReordering)).toEqualTypeOf<ColumnReordering | undefined>();\nexpectTypeOf(x.pluginOf(ColumnResizing)).toEqualTypeOf<ColumnResizing | undefined>();\n"],"names":["x","expectTypeOf","pluginOf","DataSorting","toEqualTypeOf","ColumnReordering","ColumnResizing"],"mappings":";;;;;;;;AAQA;AACA,MAAMA,CAAC,GAAG,CAAoC,CAAA;;AAE9C;AACA;AACAC,YAAY,CAACD,CAAC,CAACE,QAAQ,CAACC,OAAW,CAAC,CAAC,CAACC,aAAa,EAA2B,CAAA;AAC9EH,YAAY,CAACD,CAAC,CAACE,QAAQ,CAACG,gBAAgB,CAAC,CAAC,CAACD,aAAa,EAAgC,CAAA;AACxFH,YAAY,CAACD,CAAC,CAACE,QAAQ,CAACI,cAAc,CAAC,CAAC,CAACF,aAAa,EAA8B"}
1
+ {"version":3,"file":"table-api.test.js","sources":["../../../src/-private/-type-tests/table-api.test.ts"],"sourcesContent":["import { expectTypeOf } from 'expect-type';\n\nimport { ColumnReordering } from '../../plugins/column-reordering';\nimport { ColumnResizing } from '../../plugins/column-resizing';\nimport { DataSorting } from '../../plugins/data-sorting';\n\nimport type { Table } from '[public-types]';\n\n// We're testing types, not behaviors\nconst x = 0 as unknown as Table<{ x: number }>;\n\n//////////////////////////////\n// <Table>#pluginOf\nexpectTypeOf(x.pluginOf(DataSorting)).toEqualTypeOf<DataSorting | undefined>();\nexpectTypeOf(x.pluginOf(ColumnReordering)).toEqualTypeOf<ColumnReordering | undefined>();\nexpectTypeOf(x.pluginOf(ColumnResizing)).toEqualTypeOf<ColumnResizing | undefined>();\n"],"names":["x","expectTypeOf","pluginOf","DataSorting","toEqualTypeOf","ColumnReordering","ColumnResizing"],"mappings":";;;;;;;;;AAQA;AACA,MAAMA,CAAC,GAAG,CAAoC,CAAA;;AAE9C;AACA;AACAC,YAAY,CAACD,CAAC,CAACE,QAAQ,CAACC,OAAW,CAAC,CAAC,CAACC,aAAa,EAA2B,CAAA;AAC9EH,YAAY,CAACD,CAAC,CAACE,QAAQ,CAACG,gBAAgB,CAAC,CAAC,CAACD,aAAa,EAAgC,CAAA;AACxFH,YAAY,CAACD,CAAC,CAACE,QAAQ,CAACI,cAAc,CAAC,CAAC,CAACF,aAAa,EAA8B"}
@@ -3,11 +3,11 @@ import { expectTypeOf } from 'expect-type';
3
3
  import { BasePlugin } from '../../plugins/-private/base.js';
4
4
  import { ColumnReordering } from '../../plugins/column-reordering/plugin.js';
5
5
  import '../../plugins/column-resizing/handle.js';
6
+ import '@ember/template';
6
7
  import { ColumnResizing } from '../../plugins/column-resizing/plugin.js';
7
8
  import { ColumnVisibility } from '../../plugins/column-visibility/plugin.js';
8
9
  import { Sorting } from '../../plugins/data-sorting/plugin.js';
9
10
  import '../../plugins/data-sorting/types.js';
10
- import '@ember/template';
11
11
  import { StickyColumns } from '../../plugins/sticky-columns/plugin.js';
12
12
 
13
13
  /////////////////////////////////////////////
@@ -9,7 +9,12 @@ interface CellContext<T> {
9
9
  row: Row<T>;
10
10
  }
11
11
  type ColumnPluginOption<P = Plugin> = P extends BasePlugin ? [Constructor<P>, () => ColumnOptionsFor<SignatureFrom<P>>] : [P | Constructor<P>, () => unknown];
12
- type CellOptions = Record<string, unknown>;
12
+ type CellOptions = {
13
+ /**
14
+ * when no value is present for a given set of data for the given column config
15
+ */
16
+ defaultValue?: string;
17
+ } & Record<string, unknown>;
13
18
  interface ColumnConfig<T = unknown> {
14
19
  /**
15
20
  * the `key` is required for preferences storage, as well as
@@ -1,3 +1,4 @@
1
+ import { htmlSafe } from '@ember/template';
1
2
  import { Column } from "../../index";
2
3
  /**
3
4
  * The column actively being resized by the user.
@@ -22,4 +23,13 @@ declare const canShrink: (column: Column) => boolean | 0;
22
23
  * - or if we're asking about the first column (resize handles may only be "between" columns)
23
24
  */
24
25
  declare const hasResizeHandle: (column: Column) => boolean;
25
- export { isResizing, canShrink, hasResizeHandle };
26
+ /**
27
+ * In this plugin (by default), styles are only applied to the headers automatically.
28
+ * in <Table> UIs, the header cells control the widths of all cells in that column.
29
+ * There are other kinds of tabular-like markup that may want to grab the widths of columns,
30
+ * because The Platform does not manage that automatically (like if divs and roles were used manually)
31
+ *
32
+ * This utility is meant to be applied to the `style` attribute of a particular td-like element.
33
+ */
34
+ declare const styleStringFor: <DataType = unknown>(column: Column<DataType>) => ReturnType<typeof htmlSafe>;
35
+ export { isResizing, canShrink, hasResizeHandle, styleStringFor };
@@ -1,3 +1,4 @@
1
+ import { htmlSafe } from '@ember/template';
1
2
  import { meta } from '../-private/base.js';
2
3
  import { ColumnResizing } from './plugin.js';
3
4
 
@@ -27,5 +28,29 @@ const canShrink = column => meta.forColumn(column, ColumnResizing).canShrink;
27
28
  */
28
29
  const hasResizeHandle = column => meta.forColumn(column, ColumnResizing).hasResizeHandle;
29
30
 
30
- export { canShrink, hasResizeHandle, isResizing };
31
+ /**
32
+ * In this plugin (by default), styles are only applied to the headers automatically.
33
+ * in <Table> UIs, the header cells control the widths of all cells in that column.
34
+ * There are other kinds of tabular-like markup that may want to grab the widths of columns,
35
+ * because The Platform does not manage that automatically (like if divs and roles were used manually)
36
+ *
37
+ * This utility is meant to be applied to the `style` attribute of a particular td-like element.
38
+ */
39
+ const styleStringFor = column => {
40
+ let columnMeta = meta.forColumn(column, ColumnResizing);
41
+ let result = '';
42
+
43
+ /**
44
+ * Styles are applied regardless of the "table" being resizable or not
45
+ * because in non-<table> UIs, we need to ensure that all cells in a column
46
+ * have the same width
47
+ */
48
+ for (let [key, value] of Object.entries(columnMeta.style)) {
49
+ result += `${key}:${value};`;
50
+ }
51
+ result = ';' + result;
52
+ return htmlSafe(result);
53
+ };
54
+
55
+ export { canShrink, hasResizeHandle, isResizing, styleStringFor };
31
56
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/plugins/column-resizing/helpers.ts"],"sourcesContent":["import { meta } from '../-private/base';\nimport { ColumnResizing } from './plugin';\n\nimport type { Column } from '[public-types]';\n\n/**\n * The column actively being resized by the user.\n *\n * Note that during resizing, multiple columns are resized at once,\n * dependending on the boundaries of the resize events.\n *\n * The other columns being resized as a consequence of \"this\" column will not\n * be marked as isResizing, because this is a user-scoped question:\n * \"Is the user directly resizing this column?\"\n */\nexport const isResizing = (column: Column) => meta.forColumn(column, ColumnResizing).isResizing;\n\n/**\n * Does the column have room to shrink?\n */\nexport const canShrink = (column: Column) => meta.forColumn(column, ColumnResizing).canShrink;\n\n/**\n * Does the column have a resize handle?\n * The return value of this function can be determined by\n * - if resizing is enabled for the column\n * - if resizing is enabled for the whole table\n * - or if we're asking about the first column (resize handles may only be \"between\" columns)\n */\nexport const hasResizeHandle = (column: Column) =>\n meta.forColumn(column, ColumnResizing).hasResizeHandle;\n"],"names":["isResizing","column","meta","forColumn","ColumnResizing","canShrink","hasResizeHandle"],"mappings":";;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaA,MAAAA,UAAU,GAAIC,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACJ,WAAU;;AAE/F;AACA;AACA;AACaK,MAAAA,SAAS,GAAIJ,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACC,UAAS;;AAE7F;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,eAAe,GAAIL,MAAc,IAC5CC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACE;;;;"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/plugins/column-resizing/helpers.ts"],"sourcesContent":["import { htmlSafe } from '@ember/template';\n\nimport { meta } from '../-private/base';\nimport { ColumnResizing } from './plugin';\n\nimport type { Column } from '[public-types]';\n\n/**\n * The column actively being resized by the user.\n *\n * Note that during resizing, multiple columns are resized at once,\n * dependending on the boundaries of the resize events.\n *\n * The other columns being resized as a consequence of \"this\" column will not\n * be marked as isResizing, because this is a user-scoped question:\n * \"Is the user directly resizing this column?\"\n */\nexport const isResizing = (column: Column) => meta.forColumn(column, ColumnResizing).isResizing;\n\n/**\n * Does the column have room to shrink?\n */\nexport const canShrink = (column: Column) => meta.forColumn(column, ColumnResizing).canShrink;\n\n/**\n * Does the column have a resize handle?\n * The return value of this function can be determined by\n * - if resizing is enabled for the column\n * - if resizing is enabled for the whole table\n * - or if we're asking about the first column (resize handles may only be \"between\" columns)\n */\nexport const hasResizeHandle = (column: Column) =>\n meta.forColumn(column, ColumnResizing).hasResizeHandle;\n\n/**\n * In this plugin (by default), styles are only applied to the headers automatically.\n * in <Table> UIs, the header cells control the widths of all cells in that column.\n * There are other kinds of tabular-like markup that may want to grab the widths of columns,\n * because The Platform does not manage that automatically (like if divs and roles were used manually)\n *\n * This utility is meant to be applied to the `style` attribute of a particular td-like element.\n */\nexport const styleStringFor = <DataType = unknown>(\n column: Column<DataType>\n): ReturnType<typeof htmlSafe> => {\n let columnMeta = meta.forColumn(column, ColumnResizing);\n\n let result = '';\n\n /**\n * Styles are applied regardless of the \"table\" being resizable or not\n * because in non-<table> UIs, we need to ensure that all cells in a column\n * have the same width\n */\n for (let [key, value] of Object.entries(columnMeta.style)) {\n result += `${key}:${value};`;\n }\n\n result = ';' + result;\n\n return htmlSafe(result);\n};\n"],"names":["isResizing","column","meta","forColumn","ColumnResizing","canShrink","hasResizeHandle","styleStringFor","columnMeta","result","key","value","Object","entries","style","htmlSafe"],"mappings":";;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaA,MAAAA,UAAU,GAAIC,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACJ,WAAU;;AAE/F;AACA;AACA;AACaK,MAAAA,SAAS,GAAIJ,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACC,UAAS;;AAE7F;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,eAAe,GAAIL,MAAc,IAC5CC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACE,gBAAe;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,cAAc,GACzBN,MAAwB,IACQ;EAChC,IAAIO,UAAU,GAAGN,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAAA;EAEvD,IAAIK,MAAM,GAAG,EAAE,CAAA;;AAEf;AACF;AACA;AACA;AACA;AACE,EAAA,KAAK,IAAI,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,UAAU,CAACM,KAAK,CAAC,EAAE;AACzDL,IAAAA,MAAM,IAAK,CAAA,EAAEC,GAAI,CAAA,CAAA,EAAGC,KAAM,CAAE,CAAA,CAAA,CAAA;AAC9B,GAAA;EAEAF,MAAM,GAAG,GAAG,GAAGA,MAAM,CAAA;EAErB,OAAOM,QAAQ,CAACN,MAAM,CAAC,CAAA;AACzB;;;;"}
@@ -1,4 +1,4 @@
1
1
  export { resizeHandle } from './handle.js';
2
- export { canShrink, hasResizeHandle, isResizing } from './helpers.js';
2
+ export { canShrink, hasResizeHandle, isResizing, styleStringFor } from './helpers.js';
3
3
  export { ColumnResizing, ColumnResizing as Plugin } from './plugin.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -44,6 +44,7 @@ _defineProperty(ColumnResizing, "features", ['columnWidth']);
44
44
  const DEFAULT_COLUMN_OPTIONS = {
45
45
  minWidth: 128
46
46
  };
47
+ const ALLOWED_COLUMN_OPTIONS = ['minWidth', 'width', 'isResizable'];
47
48
 
48
49
  /**
49
50
  * @private
@@ -62,7 +63,7 @@ let ColumnMeta = (_class = class ColumnMeta {
62
63
  get options() {
63
64
  let columnOptions = options.forColumn(this.column, ColumnResizing);
64
65
  let filteredOptions = Object.entries(columnOptions || {}).reduce((result, [k, v]) => {
65
- if (v) {
66
+ if (ALLOWED_COLUMN_OPTIONS.includes(k)) {
66
67
  result[k] = v;
67
68
  }
68
69
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-resizing/plugin.ts"],"sourcesContent":["import { cached, tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport { BasePlugin, columns, meta, options } from '../-private/base';\nimport { applyStyles } from '../-private/utils';\nimport { getAccurateClientHeight, getAccurateClientWidth, totalGapOf } from './utils';\n\nimport type { ColumnApi } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\nexport interface ColumnOptions {\n /**\n * Force a starting width\n * This may not be less than the minWidth\n */\n width?: number;\n /**\n * Default: 128px\n */\n minWidth?: number;\n /**\n * Flip if the column is resizable or not.\n * The default is whatever the table's plugin option is set to\n * (and then yet again true, if not set at all)\n */\n isResizable?: boolean;\n}\n\nexport interface TableOptions {\n /**\n * Toggle whether the table is able to be resized at all\n *\n * default :true\n */\n enabled?: boolean;\n\n /**\n * By default, each column's \"handle\" position is on the\n * left-hand side of the column.\n *\n * If, for style-reasons, you want to move it to the right,\n * this option should reflect that so that the calculations can be\n * updated to match the expected behavior of which column(s) grow/shrink\n *\n * Valid values are 'left' or 'right'\n */\n handlePosition?: string;\n}\n\ninterface Signature {\n Meta: {\n Column: ColumnMeta;\n Table: TableMeta;\n };\n Options: {\n Plugin: TableOptions;\n Column: ColumnOptions;\n };\n}\n\n/**\n * One instance of a plugin exists per table\n * but a plugin can have a \"Meta\" for each column\n */\nexport class ColumnResizing extends BasePlugin<Signature> {\n name = 'column-resizing';\n static features = ['columnWidth'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n };\n\n headerCellModifier = (element: HTMLElement, { column }: ColumnApi) => {\n let columnMeta = meta.forColumn(column, ColumnResizing);\n\n element.setAttribute('data-test-is-resizable', `${columnMeta.isResizable}`);\n\n applyStyles(element, columnMeta.style);\n };\n\n /**\n * This is what ends up calling resize when the browesr changes\n * (assuming that the containing element's styles stretch to fill the space)\n *\n * Later, when container queries are more broadly supported, we'll want to watch\n * the container instead of the window to prevent unneeded updates (as a window can change\n * size without the container changing size)\n */\n containerModifier = resizeObserver;\n\n reset() {\n let tableMeta = meta.forTable(this.table, ColumnResizing);\n\n tableMeta.reset();\n }\n}\n\nconst DEFAULT_COLUMN_OPTIONS = {\n minWidth: 128,\n};\n\n/**\n * @private\n *\n * Contains resizable information for a particular column\n */\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n @tracked _width?: number;\n @tracked isResizing = false;\n\n get tableMeta() {\n return meta.forTable(this.column.table, ColumnResizing);\n }\n\n @cached\n get options() {\n let columnOptions = options.forColumn(this.column, ColumnResizing);\n let filteredOptions = Object.entries(columnOptions || {}).reduce((result, [k, v]) => {\n if (v) {\n result[k] = v;\n }\n\n return result;\n }, {} as Record<string, unknown>) as ColumnOptions;\n\n return {\n ...DEFAULT_COLUMN_OPTIONS,\n ...filteredOptions,\n };\n }\n\n get minWidth() {\n return this.options.minWidth;\n }\n\n get initialWidth() {\n return this.options.width;\n }\n\n get canShrink() {\n return this.width && this.width > this.minWidth;\n }\n\n get roomToShrink() {\n return this.width ? this.width - this.minWidth : 0;\n }\n\n get isResizable() {\n return this.options.isResizable ?? this.tableMeta.isResizable;\n }\n\n get hasResizeHandle() {\n let previous = columns.previous(this.column);\n\n if (!previous) return false;\n\n return this.isResizable && meta.forColumn(previous, ColumnResizing).isResizable;\n }\n\n get width() {\n let width = this._width ?? this.initialWidth;\n\n if (!width) {\n let { defaultColumnWidth } = this.tableMeta;\n\n width = defaultColumnWidth ? Math.max(defaultColumnWidth, this.minWidth) : this.minWidth;\n }\n\n return width;\n }\n\n set width(value) {\n this._width = value;\n }\n\n get style() {\n let styles: Partial<Pick<CSSStyleDeclaration, 'width' | 'minWidth'>> = {};\n\n if (this.width) styles.width = `${this.width}px`;\n if (this.minWidth) styles.minWidth = `${this.minWidth}px`;\n\n return styles;\n }\n\n @action\n resize(delta: number) {\n this.tableMeta.resizeColumn(this.column, delta);\n }\n}\n\n/**\n * @private\n *\n * individual column width must exclude:\n * - padding\n * - margin\n * - gap (partial)\n * - any other positioning offsets\n *\n * Otherwise the table will infinitely resize itself\n */\nfunction distributeDelta(delta: number, visibleColumns: Column[]) {\n if (delta === 0) return;\n\n let metas = visibleColumns.map((column) => meta.forColumn(column, ColumnResizing));\n\n let resizableMetas = metas.filter(\n (meta) => meta.isResizable && (delta < 0 ? meta.canShrink : true)\n );\n\n let columnDelta = delta / resizableMetas.length;\n\n for (let meta of resizableMetas) {\n assert('cannot resize a column that does not have a width', meta.width);\n meta.width = Math.max(meta.width + columnDelta, meta.minWidth);\n }\n}\n\n/**\n * @private\n *\n * Contains resizable and width information regarding the table as a whole\n */\nexport class TableMeta {\n constructor(private table: Table) {}\n\n @tracked scrollContainerHeight?: number;\n @tracked scrollContainerWidth?: number;\n\n get options() {\n return options.forTable(this.table, ColumnResizing);\n }\n\n get isResizable() {\n return this.options?.enabled ?? true;\n }\n\n get defaultColumnWidth() {\n if (!this.scrollContainerWidth) return;\n\n return (\n (this.scrollContainerWidth - this.totalInitialColumnWidths) /\n this.columnsWithoutInitialWidth.length\n );\n }\n\n get #availableColumns() {\n return columns.for(this.table, ColumnResizing);\n }\n\n get visibleColumnMetas() {\n return this.#availableColumns.map((column) => meta.forColumn(column, ColumnResizing));\n }\n\n get totalInitialColumnWidths() {\n return this.visibleColumnMetas.reduce((acc, meta) => (acc += meta.initialWidth ?? 0), 0);\n }\n\n get columnsWithoutInitialWidth() {\n return this.visibleColumnMetas.filter((meta) => !meta.initialWidth);\n }\n\n get totalVisibleColumnsWidth() {\n return this.visibleColumnMetas.reduce((acc, column) => (acc += column.width ?? 0), 0);\n }\n\n @action\n reset() {\n if (!this.scrollContainerWidth) return;\n\n for (let column of this.visibleColumnMetas) {\n column._width = undefined;\n }\n }\n\n @action\n onTableResize(entry: ResizeObserverEntry) {\n assert('scroll container element must be an HTMLElement', entry.target instanceof HTMLElement);\n\n this.scrollContainerWidth = getAccurateClientWidth(entry.target);\n this.scrollContainerHeight = getAccurateClientHeight(entry.target);\n\n // TODO: extract this to card-list and remove it from the plugin\n // card-list will provide its own column-resizing plugin\n // by sub-classing this one, and defining its own way of calculating the \"diff\"\n let totalGap = totalGapOf(entry.target.querySelector('[role=\"row\"]'));\n let diff = this.scrollContainerWidth - this.totalVisibleColumnsWidth - totalGap;\n\n distributeDelta(diff, this.#availableColumns);\n }\n\n @action\n resizeColumn(column: Column, delta: number) {\n if (delta === 0) return;\n\n /**\n * When the delta is negative, we are dragging to the next\n * when positive, we are dragging to the right\n * when dragging to the right, we want to grow the column\n * when dragging to the left, we grow the \"next\" column,\n * which shrinks the column we're dragging\n *\n * This assumes the resize handle for any column is on the right-hand\n * side of the column header\n *\n * If the resize handle were on the left-hand side of the column header\n * we'd want the column.next to be column.previous\n *\n * This is CSS dependent, and can be configured in plugin\n * options\n */\n let isDraggingRight = delta > 0;\n let position = this.options?.handlePosition ?? 'left';\n\n let growingColumn: Column | null | undefined;\n\n if (position === 'right') {\n growingColumn = isDraggingRight ? columns.next(column) : column;\n } else {\n growingColumn = isDraggingRight ? columns.previous(column) : column;\n }\n\n if (!growingColumn) return;\n\n let growingColumnMeta = meta.forColumn(growingColumn, ColumnResizing);\n\n assert('cannot resize a column that does not have a width', growingColumnMeta.width);\n\n let shrinkableColumns =\n delta > 0 ? columns.after(growingColumn) : columns.before(growingColumn).reverse();\n\n let shrinkableColumnsMetas = shrinkableColumns\n .map((column) => meta.forColumn(column, ColumnResizing))\n .filter((meta) => meta.canShrink);\n\n let remainder = Math.abs(delta);\n\n while (shrinkableColumnsMetas.length > 0) {\n let shrinkingColumnMeta = shrinkableColumnsMetas.shift();\n\n assert('cannot resize a column that does not have a width', shrinkingColumnMeta?.width);\n\n let actualDelta = Math.min(remainder, shrinkingColumnMeta.roomToShrink);\n\n growingColumnMeta.width += actualDelta;\n shrinkingColumnMeta.width -= actualDelta;\n remainder -= actualDelta;\n }\n }\n}\n\n/**\n * @private\n * included in the same file as the plugin due to circular dependency\n *\n * This goes on the containing element\n *\n * @example\n * ```hbs\n * <div {{resizeObserver @table}}>\n * <table>\n * ```\n */\nfunction resizeObserver(element: HTMLElement, table: Table) {\n let observer = getObserver(element, table);\n\n observer.observe(element);\n\n return () => {\n observer.unobserve(element);\n };\n}\n\nlet CACHE = new WeakMap<HTMLElement, ResizeObserver>();\n\n/**\n * This is technically \"inefficient\" as you don't want too many resize\n * observers on a page, but tables are so big, that I don't see too many use cases\n * where you'd have 10+ tables on a page\n */\nfunction getObserver(element: HTMLElement, table: Table): ResizeObserver {\n let existing = CACHE.get(element);\n\n if (existing) return existing;\n\n existing = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (let entry of entries) {\n meta.forTable(table, ColumnResizing).onTableResize(entry);\n }\n });\n\n return existing;\n}\n"],"names":["ColumnResizing","BasePlugin","column","ColumnMeta","table","TableMeta","element","columnMeta","meta","forColumn","setAttribute","isResizable","applyStyles","style","resizeObserver","reset","tableMeta","forTable","DEFAULT_COLUMN_OPTIONS","minWidth","constructor","options","columnOptions","filteredOptions","Object","entries","reduce","result","k","v","initialWidth","width","canShrink","roomToShrink","hasResizeHandle","previous","columns","_width","defaultColumnWidth","Math","max","value","styles","resize","delta","resizeColumn","tracked","cached","action","distributeDelta","visibleColumns","metas","map","resizableMetas","filter","columnDelta","length","assert","enabled","scrollContainerWidth","totalInitialColumnWidths","columnsWithoutInitialWidth","visibleColumnMetas","acc","totalVisibleColumnsWidth","undefined","onTableResize","entry","target","HTMLElement","getAccurateClientWidth","scrollContainerHeight","getAccurateClientHeight","totalGap","totalGapOf","querySelector","diff","isDraggingRight","position","handlePosition","growingColumn","next","growingColumnMeta","shrinkableColumns","after","before","reverse","shrinkableColumnsMetas","remainder","abs","shrinkingColumnMeta","shift","actualDelta","min","for","observer","getObserver","observe","unobserve","CACHE","WeakMap","existing","get","ResizeObserver"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-resizing/plugin.ts"],"sourcesContent":["import { cached, tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport { BasePlugin, columns, meta, options } from '../-private/base';\nimport { applyStyles } from '../-private/utils';\nimport { getAccurateClientHeight, getAccurateClientWidth, totalGapOf } from './utils';\n\nimport type { ColumnApi } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\nexport interface ColumnOptions {\n /**\n * Force a starting width\n * This may not be less than the minWidth\n */\n width?: number;\n /**\n * Default: 128px\n */\n minWidth?: number;\n /**\n * Flip if the column is resizable or not.\n * The default is whatever the table's plugin option is set to\n * (and then yet again true, if not set at all)\n */\n isResizable?: boolean;\n}\n\nexport interface TableOptions {\n /**\n * Toggle whether the table is able to be resized at all\n *\n * default :true\n */\n enabled?: boolean;\n\n /**\n * By default, each column's \"handle\" position is on the\n * left-hand side of the column.\n *\n * If, for style-reasons, you want to move it to the right,\n * this option should reflect that so that the calculations can be\n * updated to match the expected behavior of which column(s) grow/shrink\n *\n * Valid values are 'left' or 'right'\n */\n handlePosition?: string;\n}\n\ninterface Signature {\n Meta: {\n Column: ColumnMeta;\n Table: TableMeta;\n };\n Options: {\n Plugin: TableOptions;\n Column: ColumnOptions;\n };\n}\n\n/**\n * One instance of a plugin exists per table\n * but a plugin can have a \"Meta\" for each column\n */\nexport class ColumnResizing extends BasePlugin<Signature> {\n name = 'column-resizing';\n static features = ['columnWidth'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n };\n\n headerCellModifier = (element: HTMLElement, { column }: ColumnApi) => {\n let columnMeta = meta.forColumn(column, ColumnResizing);\n\n element.setAttribute('data-test-is-resizable', `${columnMeta.isResizable}`);\n\n applyStyles(element, columnMeta.style);\n };\n\n /**\n * This is what ends up calling resize when the browesr changes\n * (assuming that the containing element's styles stretch to fill the space)\n *\n * Later, when container queries are more broadly supported, we'll want to watch\n * the container instead of the window to prevent unneeded updates (as a window can change\n * size without the container changing size)\n */\n containerModifier = resizeObserver;\n\n reset() {\n let tableMeta = meta.forTable(this.table, ColumnResizing);\n\n tableMeta.reset();\n }\n}\n\nconst DEFAULT_COLUMN_OPTIONS = {\n minWidth: 128,\n};\n\nconst ALLOWED_COLUMN_OPTIONS = ['minWidth', 'width', 'isResizable'];\n\n/**\n * @private\n *\n * Contains resizable information for a particular column\n */\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n @tracked _width?: number;\n @tracked isResizing = false;\n\n get tableMeta() {\n return meta.forTable(this.column.table, ColumnResizing);\n }\n\n @cached\n get options() {\n let columnOptions = options.forColumn(this.column, ColumnResizing);\n let filteredOptions = Object.entries(columnOptions || {}).reduce((result, [k, v]) => {\n if (ALLOWED_COLUMN_OPTIONS.includes(k)) {\n result[k] = v;\n }\n\n return result;\n }, {} as Record<string, unknown>) as ColumnOptions;\n\n return {\n ...DEFAULT_COLUMN_OPTIONS,\n ...filteredOptions,\n };\n }\n\n get minWidth() {\n return this.options.minWidth;\n }\n\n get initialWidth() {\n return this.options.width;\n }\n\n get canShrink() {\n return this.width && this.width > this.minWidth;\n }\n\n get roomToShrink() {\n return this.width ? this.width - this.minWidth : 0;\n }\n\n get isResizable() {\n return this.options.isResizable ?? this.tableMeta.isResizable;\n }\n\n get hasResizeHandle() {\n let previous = columns.previous(this.column);\n\n if (!previous) return false;\n\n return this.isResizable && meta.forColumn(previous, ColumnResizing).isResizable;\n }\n\n get width() {\n let width = this._width ?? this.initialWidth;\n\n if (!width) {\n let { defaultColumnWidth } = this.tableMeta;\n\n width = defaultColumnWidth ? Math.max(defaultColumnWidth, this.minWidth) : this.minWidth;\n }\n\n return width;\n }\n\n set width(value) {\n this._width = value;\n }\n\n get style() {\n let styles: Partial<Pick<CSSStyleDeclaration, 'width' | 'minWidth'>> = {};\n\n if (this.width) styles.width = `${this.width}px`;\n if (this.minWidth) styles.minWidth = `${this.minWidth}px`;\n\n return styles;\n }\n\n @action\n resize(delta: number) {\n this.tableMeta.resizeColumn(this.column, delta);\n }\n}\n\n/**\n * @private\n *\n * individual column width must exclude:\n * - padding\n * - margin\n * - gap (partial)\n * - any other positioning offsets\n *\n * Otherwise the table will infinitely resize itself\n */\nfunction distributeDelta(delta: number, visibleColumns: Column[]) {\n if (delta === 0) return;\n\n let metas = visibleColumns.map((column) => meta.forColumn(column, ColumnResizing));\n\n let resizableMetas = metas.filter(\n (meta) => meta.isResizable && (delta < 0 ? meta.canShrink : true)\n );\n\n let columnDelta = delta / resizableMetas.length;\n\n for (let meta of resizableMetas) {\n assert('cannot resize a column that does not have a width', meta.width);\n meta.width = Math.max(meta.width + columnDelta, meta.minWidth);\n }\n}\n\n/**\n * @private\n *\n * Contains resizable and width information regarding the table as a whole\n */\nexport class TableMeta {\n constructor(private table: Table) {}\n\n @tracked scrollContainerHeight?: number;\n @tracked scrollContainerWidth?: number;\n\n get options() {\n return options.forTable(this.table, ColumnResizing);\n }\n\n get isResizable() {\n return this.options?.enabled ?? true;\n }\n\n get defaultColumnWidth() {\n if (!this.scrollContainerWidth) return;\n\n return (\n (this.scrollContainerWidth - this.totalInitialColumnWidths) /\n this.columnsWithoutInitialWidth.length\n );\n }\n\n get #availableColumns() {\n return columns.for(this.table, ColumnResizing);\n }\n\n get visibleColumnMetas() {\n return this.#availableColumns.map((column) => meta.forColumn(column, ColumnResizing));\n }\n\n get totalInitialColumnWidths() {\n return this.visibleColumnMetas.reduce((acc, meta) => (acc += meta.initialWidth ?? 0), 0);\n }\n\n get columnsWithoutInitialWidth() {\n return this.visibleColumnMetas.filter((meta) => !meta.initialWidth);\n }\n\n get totalVisibleColumnsWidth() {\n return this.visibleColumnMetas.reduce((acc, column) => (acc += column.width ?? 0), 0);\n }\n\n @action\n reset() {\n if (!this.scrollContainerWidth) return;\n\n for (let column of this.visibleColumnMetas) {\n column._width = undefined;\n }\n }\n\n @action\n onTableResize(entry: ResizeObserverEntry) {\n assert('scroll container element must be an HTMLElement', entry.target instanceof HTMLElement);\n\n this.scrollContainerWidth = getAccurateClientWidth(entry.target);\n this.scrollContainerHeight = getAccurateClientHeight(entry.target);\n\n // TODO: extract this to card-list and remove it from the plugin\n // card-list will provide its own column-resizing plugin\n // by sub-classing this one, and defining its own way of calculating the \"diff\"\n let totalGap = totalGapOf(entry.target.querySelector('[role=\"row\"]'));\n let diff = this.scrollContainerWidth - this.totalVisibleColumnsWidth - totalGap;\n\n distributeDelta(diff, this.#availableColumns);\n }\n\n @action\n resizeColumn(column: Column, delta: number) {\n if (delta === 0) return;\n\n /**\n * When the delta is negative, we are dragging to the next\n * when positive, we are dragging to the right\n * when dragging to the right, we want to grow the column\n * when dragging to the left, we grow the \"next\" column,\n * which shrinks the column we're dragging\n *\n * This assumes the resize handle for any column is on the right-hand\n * side of the column header\n *\n * If the resize handle were on the left-hand side of the column header\n * we'd want the column.next to be column.previous\n *\n * This is CSS dependent, and can be configured in plugin\n * options\n */\n let isDraggingRight = delta > 0;\n let position = this.options?.handlePosition ?? 'left';\n\n let growingColumn: Column | null | undefined;\n\n if (position === 'right') {\n growingColumn = isDraggingRight ? columns.next(column) : column;\n } else {\n growingColumn = isDraggingRight ? columns.previous(column) : column;\n }\n\n if (!growingColumn) return;\n\n let growingColumnMeta = meta.forColumn(growingColumn, ColumnResizing);\n\n assert('cannot resize a column that does not have a width', growingColumnMeta.width);\n\n let shrinkableColumns =\n delta > 0 ? columns.after(growingColumn) : columns.before(growingColumn).reverse();\n\n let shrinkableColumnsMetas = shrinkableColumns\n .map((column) => meta.forColumn(column, ColumnResizing))\n .filter((meta) => meta.canShrink);\n\n let remainder = Math.abs(delta);\n\n while (shrinkableColumnsMetas.length > 0) {\n let shrinkingColumnMeta = shrinkableColumnsMetas.shift();\n\n assert('cannot resize a column that does not have a width', shrinkingColumnMeta?.width);\n\n let actualDelta = Math.min(remainder, shrinkingColumnMeta.roomToShrink);\n\n growingColumnMeta.width += actualDelta;\n shrinkingColumnMeta.width -= actualDelta;\n remainder -= actualDelta;\n }\n }\n}\n\n/**\n * @private\n * included in the same file as the plugin due to circular dependency\n *\n * This goes on the containing element\n *\n * @example\n * ```hbs\n * <div {{resizeObserver @table}}>\n * <table>\n * ```\n */\nfunction resizeObserver(element: HTMLElement, table: Table) {\n let observer = getObserver(element, table);\n\n observer.observe(element);\n\n return () => {\n observer.unobserve(element);\n };\n}\n\nlet CACHE = new WeakMap<HTMLElement, ResizeObserver>();\n\n/**\n * This is technically \"inefficient\" as you don't want too many resize\n * observers on a page, but tables are so big, that I don't see too many use cases\n * where you'd have 10+ tables on a page\n */\nfunction getObserver(element: HTMLElement, table: Table): ResizeObserver {\n let existing = CACHE.get(element);\n\n if (existing) return existing;\n\n existing = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (let entry of entries) {\n meta.forTable(table, ColumnResizing).onTableResize(entry);\n }\n });\n\n return existing;\n}\n"],"names":["ColumnResizing","BasePlugin","column","ColumnMeta","table","TableMeta","element","columnMeta","meta","forColumn","setAttribute","isResizable","applyStyles","style","resizeObserver","reset","tableMeta","forTable","DEFAULT_COLUMN_OPTIONS","minWidth","ALLOWED_COLUMN_OPTIONS","constructor","options","columnOptions","filteredOptions","Object","entries","reduce","result","k","v","includes","initialWidth","width","canShrink","roomToShrink","hasResizeHandle","previous","columns","_width","defaultColumnWidth","Math","max","value","styles","resize","delta","resizeColumn","tracked","cached","action","distributeDelta","visibleColumns","metas","map","resizableMetas","filter","columnDelta","length","assert","enabled","scrollContainerWidth","totalInitialColumnWidths","columnsWithoutInitialWidth","visibleColumnMetas","acc","totalVisibleColumnsWidth","undefined","onTableResize","entry","target","HTMLElement","getAccurateClientWidth","scrollContainerHeight","getAccurateClientHeight","totalGap","totalGapOf","querySelector","diff","isDraggingRight","position","handlePosition","growingColumn","next","growingColumnMeta","shrinkableColumns","after","before","reverse","shrinkableColumnsMetas","remainder","abs","shrinkingColumnMeta","shift","actualDelta","min","for","observer","getObserver","observe","unobserve","CACHE","WeakMap","existing","get","ResizeObserver"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { Column } from "../../index";
3
3
  declare const isSticky: <DataType = unknown>(column: Column<DataType>) => boolean;
4
4
  declare const styleFor: <DataType = unknown>(column: Column<DataType>) => Partial<CSSStyleDeclaration>;
5
5
  /**
6
- * In this plugin, buth header and cells have the same styles,
6
+ * In this plugin, both header and cells have the same styles,
7
7
  * if applicable.
8
8
  *
9
9
  * Until this RFC https://github.com/emberjs/rfcs/pull/883
@@ -6,7 +6,7 @@ const isSticky = column => meta.forColumn(column, StickyColumns).isSticky;
6
6
  const styleFor = column => meta.forColumn(column, StickyColumns).style;
7
7
 
8
8
  /**
9
- * In this plugin, buth header and cells have the same styles,
9
+ * In this plugin, both header and cells have the same styles,
10
10
  * if applicable.
11
11
  *
12
12
  * Until this RFC https://github.com/emberjs/rfcs/pull/883
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/plugins/sticky-columns/helpers.ts"],"sourcesContent":["import { htmlSafe } from '@ember/template';\n\nimport { meta } from '../-private/base';\nimport { StickyColumns } from './plugin';\n\nimport type { Column } from '[public-types]';\n\nexport const isSticky = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, StickyColumns).isSticky;\n\nexport const styleFor = <DataType = unknown>(\n column: Column<DataType>\n): Partial<CSSStyleDeclaration> => meta.forColumn(column, StickyColumns).style;\n\n/**\n * In this plugin, buth header and cells have the same styles,\n * if applicable.\n *\n * Until this RFC https://github.com/emberjs/rfcs/pull/883\n * is merged and implemented, we can't performantly\n * use modifiers for apply styles.\n *\n * In the mean time, we'll need to append style strings, which is more work\n * for consumers, but is a reasonable trade-off for now.\n */\nexport const styleStringFor = <DataType = unknown>(\n column: Column<DataType>\n): ReturnType<typeof htmlSafe> => {\n let columnMeta = meta.forColumn(column, StickyColumns);\n\n let result = '';\n\n if (columnMeta.isSticky) {\n for (let [key, value] of Object.entries(columnMeta.style)) {\n result += `${toStyle(key)}:${value};`;\n }\n\n result = ';' + result;\n }\n\n return htmlSafe(result);\n};\n\n/**\n * the JS API for styles is camel case,\n * but CSS is kebab-case. To save on complexity and\n * amount of code, we have a super small conversion function\n * for only the properties relevant to the sticky plugin.\n */\nconst toStyle = (key: string): string => {\n switch (key) {\n case 'zIndex':\n return 'z-index';\n default:\n return key;\n }\n};\n"],"names":["isSticky","column","meta","forColumn","StickyColumns","styleFor","style","styleStringFor","columnMeta","result","key","value","Object","entries","toStyle","htmlSafe"],"mappings":";;;;AAOaA,MAAAA,QAAQ,GAAwBC,MAAwB,IACnEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,aAAa,CAAC,CAACJ,SAAQ;AAEnCK,MAAAA,QAAQ,GACnBJ,MAAwB,IACSC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,aAAa,CAAC,CAACE,MAAK;;AAE9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,cAAc,GACzBN,MAAwB,IACQ;EAChC,IAAIO,UAAU,GAAGN,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,aAAa,CAAC,CAAA;EAEtD,IAAIK,MAAM,GAAG,EAAE,CAAA;EAEf,IAAID,UAAU,CAACR,QAAQ,EAAE;AACvB,IAAA,KAAK,IAAI,CAACU,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,UAAU,CAACF,KAAK,CAAC,EAAE;MACzDG,MAAM,IAAK,GAAEK,OAAO,CAACJ,GAAG,CAAE,CAAA,CAAA,EAAGC,KAAM,CAAE,CAAA,CAAA,CAAA;AACvC,KAAA;IAEAF,MAAM,GAAG,GAAG,GAAGA,MAAM,CAAA;AACvB,GAAA;EAEA,OAAOM,QAAQ,CAACN,MAAM,CAAC,CAAA;AACzB,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,MAAMK,OAAO,GAAIJ,GAAW,IAAa;AACvC,EAAA,QAAQA,GAAG;AACT,IAAA,KAAK,QAAQ;AACX,MAAA,OAAO,SAAS,CAAA;AAClB,IAAA;AACE,MAAA,OAAOA,GAAG,CAAA;AAAC,GAAA;AAEjB,CAAC;;;;"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/plugins/sticky-columns/helpers.ts"],"sourcesContent":["import { htmlSafe } from '@ember/template';\n\nimport { meta } from '../-private/base';\nimport { StickyColumns } from './plugin';\n\nimport type { Column } from '[public-types]';\n\nexport const isSticky = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, StickyColumns).isSticky;\n\nexport const styleFor = <DataType = unknown>(\n column: Column<DataType>\n): Partial<CSSStyleDeclaration> => meta.forColumn(column, StickyColumns).style;\n\n/**\n * In this plugin, both header and cells have the same styles,\n * if applicable.\n *\n * Until this RFC https://github.com/emberjs/rfcs/pull/883\n * is merged and implemented, we can't performantly\n * use modifiers for apply styles.\n *\n * In the mean time, we'll need to append style strings, which is more work\n * for consumers, but is a reasonable trade-off for now.\n */\nexport const styleStringFor = <DataType = unknown>(\n column: Column<DataType>\n): ReturnType<typeof htmlSafe> => {\n let columnMeta = meta.forColumn(column, StickyColumns);\n\n let result = '';\n\n if (columnMeta.isSticky) {\n for (let [key, value] of Object.entries(columnMeta.style)) {\n result += `${toStyle(key)}:${value};`;\n }\n\n result = ';' + result;\n }\n\n return htmlSafe(result);\n};\n\n/**\n * the JS API for styles is camel case,\n * but CSS is kebab-case. To save on complexity and\n * amount of code, we have a super small conversion function\n * for only the properties relevant to the sticky plugin.\n */\nconst toStyle = (key: string): string => {\n switch (key) {\n case 'zIndex':\n return 'z-index';\n default:\n return key;\n }\n};\n"],"names":["isSticky","column","meta","forColumn","StickyColumns","styleFor","style","styleStringFor","columnMeta","result","key","value","Object","entries","toStyle","htmlSafe"],"mappings":";;;;AAOaA,MAAAA,QAAQ,GAAwBC,MAAwB,IACnEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,aAAa,CAAC,CAACJ,SAAQ;AAEnCK,MAAAA,QAAQ,GACnBJ,MAAwB,IACSC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,aAAa,CAAC,CAACE,MAAK;;AAE9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,cAAc,GACzBN,MAAwB,IACQ;EAChC,IAAIO,UAAU,GAAGN,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,aAAa,CAAC,CAAA;EAEtD,IAAIK,MAAM,GAAG,EAAE,CAAA;EAEf,IAAID,UAAU,CAACR,QAAQ,EAAE;AACvB,IAAA,KAAK,IAAI,CAACU,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,UAAU,CAACF,KAAK,CAAC,EAAE;MACzDG,MAAM,IAAK,GAAEK,OAAO,CAACJ,GAAG,CAAE,CAAA,CAAA,EAAGC,KAAM,CAAE,CAAA,CAAA,CAAA;AACvC,KAAA;IAEAF,MAAM,GAAG,GAAG,GAAGA,MAAM,CAAA;AACvB,GAAA;EAEA,OAAOM,QAAQ,CAACN,MAAM,CAAC,CAAA;AACzB,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,MAAMK,OAAO,GAAIJ,GAAW,IAAa;AACvC,EAAA,QAAQA,GAAG;AACT,IAAA,KAAK,QAAQ;AACX,MAAA,OAAO,SAAS,CAAA;AAClB,IAAA;AACE,MAAA,OAAOA,GAAG,CAAA;AAAC,GAAA;AAEjB,CAAC;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-headless-table",
3
- "version": "1.4.0",
3
+ "version": "1.4.2",
4
4
  "description": "An implementation of table behaviors for driving any table or table-like UI -- all without a UI (headless)",
5
5
  "keywords": [
6
6
  "ember-addon",