@telia-ace/alliance-ui 1.0.13 → 1.0.14-next.1
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.
- package/CHANGELOG.md +12 -0
- package/components/alliance-paginator.js +14 -14
- package/components/alliance-paginator.js.map +1 -1
- package/package.json +3 -3
- package/voca/components/telia-voca-stats.d.ts +0 -1
- package/voca/components/telia-voca-stats.js +0 -54
- package/voca/components/telia-voca-stats.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @telia-ace/alliance-ui
|
|
2
2
|
|
|
3
|
+
## 1.0.14-next.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 9686d20: Remove `<telia-voca-stats>` component (https://github.com/telia-company/ace-alliance-sdk/issues/335).
|
|
8
|
+
|
|
9
|
+
## 1.0.14-next.0
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 3f31c37: Fixed paginator breaking when using certain properties (https://github.com/telia-company/ace-alliance-sdk/issues/345).
|
|
14
|
+
|
|
3
15
|
## 1.0.13
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -9,7 +9,7 @@ import { c as M, a as V } from "../chunks/chevron-right-788ce8a9.js";
|
|
|
9
9
|
import "../chunks/index-eef143db.js";
|
|
10
10
|
import "../chunks/telia-vst2-dfb33a56.js";
|
|
11
11
|
import "../chunks/getSvgContent-f2389ce0.js";
|
|
12
|
-
const
|
|
12
|
+
const $ = "...", P = (e, a) => {
|
|
13
13
|
let i = a - e + 1;
|
|
14
14
|
return Array.from({ length: i }, (n, t) => t + e);
|
|
15
15
|
};
|
|
@@ -31,28 +31,28 @@ function G(e) {
|
|
|
31
31
|
function C({ itemCount: e, pageSize: a, siblingCount: i, currentPage: n }) {
|
|
32
32
|
const t = Math.ceil(e / a);
|
|
33
33
|
if (i + 5 >= t)
|
|
34
|
-
return
|
|
34
|
+
return P(1, t);
|
|
35
35
|
const s = Math.max(n - i, 1), x = Math.min(n + i, t), v = s > 2, y = x < t - 2, z = 1, T = t;
|
|
36
36
|
if (!v && y) {
|
|
37
37
|
let f = 3 + 2 * i;
|
|
38
|
-
return [
|
|
38
|
+
return [...P(1, f), $, t];
|
|
39
39
|
}
|
|
40
40
|
if (v && !y) {
|
|
41
|
-
let f = 3 + 2 * i, O =
|
|
42
|
-
return [z,
|
|
41
|
+
let f = 3 + 2 * i, O = P(t - f + 1, t);
|
|
42
|
+
return [z, $, ...O];
|
|
43
43
|
}
|
|
44
44
|
if (v && y) {
|
|
45
|
-
let f =
|
|
46
|
-
return [z,
|
|
45
|
+
let f = P(s, x);
|
|
46
|
+
return [z, $, ...f, $, T];
|
|
47
47
|
}
|
|
48
|
-
return
|
|
48
|
+
return P(1, t);
|
|
49
49
|
}
|
|
50
50
|
var H = Object.defineProperty, W = Object.getOwnPropertyDescriptor, w = (e, a, i, n) => {
|
|
51
51
|
for (var t = n > 1 ? void 0 : n ? W(a, i) : a, o = e.length - 1, s; o >= 0; o--)
|
|
52
52
|
(s = e[o]) && (t = (n ? s(a, i, t) : s(t)) || t);
|
|
53
53
|
return n && t && H(a, i, t), t;
|
|
54
54
|
};
|
|
55
|
-
let
|
|
55
|
+
let m = class extends _ {
|
|
56
56
|
constructor() {
|
|
57
57
|
super(...arguments), this.currentPage = 0, this.lastPage = 0, this.onChange = (e) => {
|
|
58
58
|
const a = G(e.currentTarget.value), i = new CustomEvent("select-page", {
|
|
@@ -79,7 +79,7 @@ let P = class extends _ {
|
|
|
79
79
|
`;
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
|
-
|
|
82
|
+
m.styles = I`
|
|
83
83
|
:host select {
|
|
84
84
|
padding: ${r(b.spacing16)} ${r(b.spacing24)};
|
|
85
85
|
border-radius: ${r(D.radiusFull)};
|
|
@@ -129,13 +129,13 @@ P.styles = I`
|
|
|
129
129
|
`;
|
|
130
130
|
w([
|
|
131
131
|
l({ type: Number, attribute: "current-page" })
|
|
132
|
-
],
|
|
132
|
+
], m.prototype, "currentPage", 2);
|
|
133
133
|
w([
|
|
134
134
|
l({ type: Number, attribute: "last-page" })
|
|
135
|
-
],
|
|
136
|
-
|
|
135
|
+
], m.prototype, "lastPage", 2);
|
|
136
|
+
m = w([
|
|
137
137
|
S("alliance-page-selector")
|
|
138
|
-
],
|
|
138
|
+
], m);
|
|
139
139
|
var X = Object.defineProperty, q = Object.getOwnPropertyDescriptor, h = (e, a, i, n) => {
|
|
140
140
|
for (var t = n > 1 ? void 0 : n ? q(a, i) : a, o = e.length - 1, s; o >= 0; o--)
|
|
141
141
|
(s = e[o]) && (t = (n ? s(a, i, t) : s(t)) || t);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alliance-paginator.js","sources":["../src/components/alliance-paginator/utils.ts","../src/components/alliance-paginator/alliance-page-selector.ts","../src/components/alliance-paginator/alliance-paginator.ts","../src/components/alliance-paginator/alliance-paginator-button.ts"],"sourcesContent":["/* \n Pagination logic taken from https://www.freecodecamp.org/news/build-a-custom-pagination-component-in-react/\n*/\nconst DOTS = '...';\n\nconst range = (start: number, end: number) => {\n let length = end - start + 1;\n /*\n Create an array of certain length and set the elements within it from\n start value to end value.\n */\n return Array.from({ length }, (_, idx) => idx + start);\n};\n\ntype Args = {\n itemCount: number;\n pageSize: number;\n siblingCount: number;\n currentPage: number;\n};\n\nexport type Pages = (number | '...')[];\n\nexport function getLastPage(pages: Pages): number {\n return pages[pages.length - 1] as number;\n}\n\nexport function listPages(lastPage: number): string[] {\n return Array.from({ length: lastPage }, (_, i) => {\n return pageToSelectValue(i + 1, lastPage);\n });\n}\n\nexport function pageToSelectValue(page: number, lastPage: number): string {\n return `${page} / ${lastPage}`;\n}\n\nexport function selectValueToPage(selectValue: string): number {\n const value = selectValue.split('/')[0];\n\n if (typeof value !== 'string') {\n throw new Error('Could not parse page value from select.');\n }\n\n return parseInt(value);\n}\n\nexport function getPagination({ itemCount, pageSize, siblingCount, currentPage }: Args): Pages {\n const totalPageCount = Math.ceil(itemCount / pageSize);\n\n // Pages count is determined as siblingCount + firstPage + lastPage + currentPage + 2*DOTS\n const totalPageNumbers = siblingCount + 5;\n\n /*\n Case 1:\n If the number of pages is less than the page numbers we want to show in our\n paginationComponent, we return the range [1..totalPageCount]\n */\n if (totalPageNumbers >= totalPageCount) {\n return range(1, totalPageCount);\n }\n\n /*\n Calculate left and right sibling index and make sure they are within range 1 and totalPageCount\n */\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPageCount);\n\n /*\n We do not show dots just when there is just one page number to be inserted between the extremes of sibling and the page limits i.e 1 and totalPageCount. Hence we are using leftSiblingIndex > 2 and rightSiblingIndex < totalPageCount - 2\n */\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPageCount - 2;\n\n const firstPageIndex = 1;\n const lastPageIndex = totalPageCount;\n\n /*\n Case 2: No left dots to show, but rights dots to be shown\n */\n if (!shouldShowLeftDots && shouldShowRightDots) {\n let leftItemCount = 3 + 2 * siblingCount;\n let leftRange = range(1, leftItemCount);\n\n return [...leftRange, DOTS, totalPageCount];\n }\n\n /*\n Case 3: No right dots to show, but left dots to be shown\n */\n if (shouldShowLeftDots && !shouldShowRightDots) {\n let rightItemCount = 3 + 2 * siblingCount;\n let rightRange = range(totalPageCount - rightItemCount + 1, totalPageCount);\n return [firstPageIndex, DOTS, ...rightRange];\n }\n\n /*\n Case 4: Both left and right dots to be shown\n */\n if (shouldShowLeftDots && shouldShowRightDots) {\n let middleRange = range(leftSiblingIndex, rightSiblingIndex);\n return [firstPageIndex, DOTS, ...middleRange, DOTS, lastPageIndex];\n }\n\n return [];\n}\n","import '@/voca/components/telia-button';\nimport { borders, colors, focus, motion, spacing } from '@/voca/foundations';\nimport { css, html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\n\nimport { listPages, pageToSelectValue, selectValueToPage } from './utils';\n\n/**\n * Event dispatched when selecting a page.\n *\n * Event: `change-page`\n *\n * Detail: Object containing the properties `nextPage` and `previousPage`.\n */\nexport type SelectPageEvent = CustomEvent<{ nextPage: number; previousPage: number }>;\n\n@customElement('alliance-page-selector')\nexport class PageSelect extends LitElement {\n static styles = css`\n :host select {\n padding: ${unsafeCSS(spacing.spacing16)} ${unsafeCSS(spacing.spacing24)};\n border-radius: ${unsafeCSS(borders.radiusFull)};\n border: ${unsafeCSS(borders.widthXs)} solid ${unsafeCSS(colors.purple850)};\n background-color: transparent;\n color: ${unsafeCSS(colors.purple850)};\n text-align: center;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n display: inline-flex;\n font-family: 'TeliaSans', Helvetica, Arial, 'Lucida Grande', sans-serif;\n font-size: ${unsafeCSS(spacing.spacing16)};\n line-height: ${unsafeCSS(spacing.spacing16)};\n transition: color ${unsafeCSS(motion.duration150)} ease,\n background-color ${unsafeCSS(motion.duration150)} ease;\n\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n outline: none;\n }\n\n :host select:hover {\n background-color: ${unsafeCSS(colors.purple850)};\n color: ${unsafeCSS(colors.white)};\n }\n\n :host select:active {\n background-color: ${unsafeCSS(colors.purple700)};\n }\n\n :host select option {\n background-color: ${unsafeCSS(colors.white)};\n color: ${unsafeCSS(colors.black)};\n text-align: center;\n }\n\n :host select::-ms-expand {\n display: none;\n }\n\n :host select:focus-visible {\n outline: solid ${unsafeCSS(focus.focusBorderWidth)} ${unsafeCSS(focus.focusColor)};\n outline-offset: ${unsafeCSS(spacing.spacing4)};\n }\n `;\n\n @property({ type: Number, attribute: 'current-page' })\n currentPage: number = 0;\n\n @property({ type: Number, attribute: 'last-page' })\n lastPage: number = 0;\n\n onChange = (\n e: Event & {\n currentTarget: HTMLSelectElement;\n }\n ) => {\n const nextPage = selectValueToPage(e.currentTarget.value);\n\n const event: SelectPageEvent = new CustomEvent('select-page', {\n bubbles: true,\n composed: true,\n detail: { nextPage, previousPage: this.currentPage },\n cancelable: true,\n });\n this.dispatchEvent(event);\n };\n\n render() {\n return html`\n <select\n id=\"select\"\n @change=${this.onChange}\n .value=${pageToSelectValue(this.currentPage, this.lastPage)}\n >\n ${repeat(\n listPages(this.lastPage),\n (page) => html`<option value=\"${page}\">${page}</option>`\n )}\n </select>\n `;\n }\n}\n","import '@/voca/components/telia-button';\nimport '@/voca/components/telia-label';\nimport { breakpoints, colors, spacing } from '@/voca/foundations';\nimport { css, html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { SelectPageEvent } from './alliance-page-selector';\n\nimport { getLastPage, getPagination, type Pages } from './utils';\n\n/**\n * Event dispatched when pressing a page button.\n *\n * Event: `change-page`\n *\n * Detail: Object containing the properties `nextPage` and `previousPage`.\n */\nexport type ChangePageEvent = CustomEvent<{ nextPage: number; previousPage: number }>;\n\n@customElement('alliance-paginator')\nexport class Paginator extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: row;\n place-items: center;\n gap: ${unsafeCSS(spacing.spacing8)};\n }\n\n :host telia-label {\n display: none;\n }\n\n :host .telia-label {\n color: ${unsafeCSS(colors.purple700)};\n }\n\n :host alliance-paginator-button[page] {\n display: none;\n }\n\n span {\n display: block;\n }\n\n @container (min-width: ${unsafeCSS(breakpoints.breakpointLg)}) {\n :host telia-label,\n :host alliance-paginator-button[page] {\n display: block;\n }\n\n :host alliance-page-selector {\n display: none;\n }\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n\n this.currentPage = this.initialPage;\n this.pages = getPagination({\n itemCount: this.itemCount,\n pageSize: this.pageSize,\n siblingCount: this.siblingCount,\n currentPage: this.currentPage,\n });\n }\n\n attributeChangedCallback(name: string, _: string | null, value: string | null) {\n super.attributeChangedCallback(name, _, value);\n\n if (name === 'initial-page') {\n this.currentPage = this.initialPage;\n }\n\n this.pages = getPagination({\n itemCount: this.itemCount,\n pageSize: this.pageSize,\n siblingCount: this.siblingCount,\n currentPage: this.currentPage,\n [name]: value,\n });\n }\n\n @property({ type: Number, attribute: 'item-count' })\n itemCount: number = 0;\n\n @property({ type: Number, attribute: 'page-size' })\n pageSize: number = 50;\n\n @property({ type: Number, attribute: 'initial-page' })\n initialPage: number = 1;\n\n @property({ type: Number, attribute: 'sibling-count' })\n siblingCount: number = 2;\n\n @state()\n currentPage: number = this.initialPage;\n\n @state()\n pages: Pages = [];\n\n changePage = (nextPage: number) => {\n if (\n nextPage === this.currentPage || // Next page is the same\n nextPage < 1 || // Next page is 0\n nextPage > (this.pages[this.pages.length - 1] as number) // Next page is outside of available pages\n ) {\n return;\n }\n\n const event: ChangePageEvent = new CustomEvent('change-page', {\n bubbles: true,\n composed: true,\n detail: { nextPage, previousPage: this.currentPage },\n cancelable: true,\n });\n const defaultNotPrevented = this.dispatchEvent(event);\n\n if (defaultNotPrevented) {\n this.currentPage = nextPage;\n\n this.pages = getPagination({\n itemCount: this.itemCount,\n pageSize: this.pageSize,\n siblingCount: this.siblingCount,\n currentPage: this.currentPage,\n });\n }\n };\n\n next = () => {\n this.changePage(this.currentPage + 1);\n };\n\n previous = () => {\n this.changePage(this.currentPage - 1);\n };\n\n onPageSelect = (event: SelectPageEvent) => this.changePage(event.detail.nextPage);\n\n render() {\n return html`\n <alliance-paginator-button\n @click=${this.previous}\n ?disabled=${this.currentPage === 1}\n icon=\"left\"\n ></alliance-paginator-button>\n\n ${repeat(this.pages, (pageNumber) =>\n pageNumber === '...'\n ? html`<telia-label>...</telia-label>`\n : html`<alliance-paginator-button\n page=${pageNumber}\n @click=${() => this.changePage(pageNumber)}\n ?selected=${this.currentPage === pageNumber}\n ></alliance-paginator-button>`\n )}\n\n <alliance-page-selector\n current-page=${this.currentPage}\n last-page=${getLastPage(this.pages)}\n @select-page=${this.onPageSelect}\n >\n </alliance-page-selector>\n\n <alliance-paginator-button\n @click=${this.next}\n ?disabled=${this.currentPage === getLastPage(this.pages)}\n icon=\"right\"\n ></alliance-paginator-button>\n `;\n }\n}\n","import '@/voca/components/telia-button';\nimport '@/voca/components/telia-icon';\nimport { chevronLeft, chevronRight } from '@/voca/icons';\nimport { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nenum Icon {\n Left = 'left',\n Right = 'right',\n}\n\n@customElement('alliance-paginator-button')\nexport class PaginatorButton extends LitElement {\n @property({ type: Icon })\n icon?: Icon;\n\n @property({ type: String })\n page?: string;\n\n @property({ type: Boolean })\n selected: boolean = false;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @property({ type: Boolean })\n clickable: boolean = true;\n\n private renderContent() {\n if (this.icon === Icon.Left) {\n return html`<telia-icon size=\"sm\" svg=\"${chevronLeft.svg}\" />`;\n }\n\n if (this.icon === Icon.Right) {\n return html`<telia-icon size=\"sm\" svg=\"${chevronRight.svg}\" />`;\n }\n\n return html`<span>${this.page}</span>`;\n }\n\n render() {\n /*\n Ignore prettier on next line because Voca \n uses textContent on the telia-button element\n to detect whether or not it only contains an\n icon - which does not take account for white space...\n https://github.com/telia-company/design-system/issues/813\n */\n // prettier-ignore\n return html`<telia-button ?disabled=${this.disabled} variant=${this.selected ? 'primary' : 'tertiary-purple'}>${this.renderContent()}</telia-button> `;\n }\n}\n"],"names":["DOTS","range","start","end","length","_","idx","getLastPage","pages","listPages","lastPage","pageToSelectValue","page","selectValueToPage","selectValue","value","getPagination","itemCount","pageSize","siblingCount","currentPage","totalPageCount","leftSiblingIndex","rightSiblingIndex","shouldShowLeftDots","shouldShowRightDots","firstPageIndex","lastPageIndex","leftItemCount","rightItemCount","rightRange","middleRange","PageSelect","LitElement","nextPage","event","html","repeat","css","unsafeCSS","spacing","borders","colors","motion","focus","__decorateClass","property","customElement","Paginator","name","pageNumber","breakpoints","state","Icon","PaginatorButton","chevronLeft","chevronRight"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alliance-paginator.js","sources":["../src/components/alliance-paginator/utils.ts","../src/components/alliance-paginator/alliance-page-selector.ts","../src/components/alliance-paginator/alliance-paginator.ts","../src/components/alliance-paginator/alliance-paginator-button.ts"],"sourcesContent":["/* \n Pagination logic taken from https://www.freecodecamp.org/news/build-a-custom-pagination-component-in-react/\n*/\nconst DOTS = '...';\n\nconst range = (start: number, end: number) => {\n let length = end - start + 1;\n /*\n Create an array of certain length and set the elements within it from\n start value to end value.\n */\n return Array.from({ length }, (_, idx) => idx + start);\n};\n\ntype Args = {\n itemCount: number;\n pageSize: number;\n siblingCount: number;\n currentPage: number;\n};\n\nexport type Pages = (number | '...')[];\n\nexport function getLastPage(pages: Pages): number {\n return pages[pages.length - 1] as number;\n}\n\nexport function listPages(lastPage: number): string[] {\n return Array.from({ length: lastPage }, (_, i) => {\n return pageToSelectValue(i + 1, lastPage);\n });\n}\n\nexport function pageToSelectValue(page: number, lastPage: number): string {\n return `${page} / ${lastPage}`;\n}\n\nexport function selectValueToPage(selectValue: string): number {\n const value = selectValue.split('/')[0];\n\n if (typeof value !== 'string') {\n throw new Error('Could not parse page value from select.');\n }\n\n return parseInt(value);\n}\n\nexport function getPagination({ itemCount, pageSize, siblingCount, currentPage }: Args): Pages {\n const totalPageCount = Math.ceil(itemCount / pageSize);\n\n // Pages count is determined as siblingCount + firstPage + lastPage + currentPage + 2*DOTS\n const totalPageNumbers = siblingCount + 5;\n\n /*\n Case 1:\n If the number of pages is less than the page numbers we want to show in our\n paginationComponent, we return the range [1..totalPageCount]\n */\n if (totalPageNumbers >= totalPageCount) {\n return range(1, totalPageCount);\n }\n\n /*\n Calculate left and right sibling index and make sure they are within range 1 and totalPageCount\n */\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPageCount);\n\n /*\n We do not show dots just when there is just one page number to be inserted between the extremes of sibling and the page limits i.e 1 and totalPageCount. Hence we are using leftSiblingIndex > 2 and rightSiblingIndex < totalPageCount - 2\n */\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPageCount - 2;\n\n const firstPageIndex = 1;\n const lastPageIndex = totalPageCount;\n\n /*\n Case 2: No left dots to show, but rights dots to be shown\n */\n if (!shouldShowLeftDots && shouldShowRightDots) {\n let leftItemCount = 3 + 2 * siblingCount;\n let leftRange = range(1, leftItemCount);\n\n return [...leftRange, DOTS, totalPageCount];\n }\n\n /*\n Case 3: No right dots to show, but left dots to be shown\n */\n if (shouldShowLeftDots && !shouldShowRightDots) {\n let rightItemCount = 3 + 2 * siblingCount;\n let rightRange = range(totalPageCount - rightItemCount + 1, totalPageCount);\n return [firstPageIndex, DOTS, ...rightRange];\n }\n\n /*\n Case 4: Both left and right dots to be shown\n */\n if (shouldShowLeftDots && shouldShowRightDots) {\n let middleRange = range(leftSiblingIndex, rightSiblingIndex);\n return [firstPageIndex, DOTS, ...middleRange, DOTS, lastPageIndex];\n }\n\n return range(1, totalPageCount);\n}\n","import '@/voca/components/telia-button';\nimport { borders, colors, focus, motion, spacing } from '@/voca/foundations';\nimport { css, html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\n\nimport { listPages, pageToSelectValue, selectValueToPage } from './utils';\n\n/**\n * Event dispatched when selecting a page.\n *\n * Event: `change-page`\n *\n * Detail: Object containing the properties `nextPage` and `previousPage`.\n */\nexport type SelectPageEvent = CustomEvent<{ nextPage: number; previousPage: number }>;\n\n@customElement('alliance-page-selector')\nexport class PageSelect extends LitElement {\n static styles = css`\n :host select {\n padding: ${unsafeCSS(spacing.spacing16)} ${unsafeCSS(spacing.spacing24)};\n border-radius: ${unsafeCSS(borders.radiusFull)};\n border: ${unsafeCSS(borders.widthXs)} solid ${unsafeCSS(colors.purple850)};\n background-color: transparent;\n color: ${unsafeCSS(colors.purple850)};\n text-align: center;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n display: inline-flex;\n font-family: 'TeliaSans', Helvetica, Arial, 'Lucida Grande', sans-serif;\n font-size: ${unsafeCSS(spacing.spacing16)};\n line-height: ${unsafeCSS(spacing.spacing16)};\n transition: color ${unsafeCSS(motion.duration150)} ease,\n background-color ${unsafeCSS(motion.duration150)} ease;\n\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n outline: none;\n }\n\n :host select:hover {\n background-color: ${unsafeCSS(colors.purple850)};\n color: ${unsafeCSS(colors.white)};\n }\n\n :host select:active {\n background-color: ${unsafeCSS(colors.purple700)};\n }\n\n :host select option {\n background-color: ${unsafeCSS(colors.white)};\n color: ${unsafeCSS(colors.black)};\n text-align: center;\n }\n\n :host select::-ms-expand {\n display: none;\n }\n\n :host select:focus-visible {\n outline: solid ${unsafeCSS(focus.focusBorderWidth)} ${unsafeCSS(focus.focusColor)};\n outline-offset: ${unsafeCSS(spacing.spacing4)};\n }\n `;\n\n @property({ type: Number, attribute: 'current-page' })\n currentPage: number = 0;\n\n @property({ type: Number, attribute: 'last-page' })\n lastPage: number = 0;\n\n onChange = (\n e: Event & {\n currentTarget: HTMLSelectElement;\n }\n ) => {\n const nextPage = selectValueToPage(e.currentTarget.value);\n\n const event: SelectPageEvent = new CustomEvent('select-page', {\n bubbles: true,\n composed: true,\n detail: { nextPage, previousPage: this.currentPage },\n cancelable: true,\n });\n this.dispatchEvent(event);\n };\n\n render() {\n return html`\n <select\n id=\"select\"\n @change=${this.onChange}\n .value=${pageToSelectValue(this.currentPage, this.lastPage)}\n >\n ${repeat(\n listPages(this.lastPage),\n (page) => html`<option value=\"${page}\">${page}</option>`\n )}\n </select>\n `;\n }\n}\n","import '@/voca/components/telia-button';\nimport '@/voca/components/telia-label';\nimport { breakpoints, colors, spacing } from '@/voca/foundations';\nimport { css, html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { SelectPageEvent } from './alliance-page-selector';\n\nimport { getLastPage, getPagination, type Pages } from './utils';\n\n/**\n * Event dispatched when pressing a page button.\n *\n * Event: `change-page`\n *\n * Detail: Object containing the properties `nextPage` and `previousPage`.\n */\nexport type ChangePageEvent = CustomEvent<{ nextPage: number; previousPage: number }>;\n\n@customElement('alliance-paginator')\nexport class Paginator extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: row;\n place-items: center;\n gap: ${unsafeCSS(spacing.spacing8)};\n }\n\n :host telia-label {\n display: none;\n }\n\n :host .telia-label {\n color: ${unsafeCSS(colors.purple700)};\n }\n\n :host alliance-paginator-button[page] {\n display: none;\n }\n\n span {\n display: block;\n }\n\n @container (min-width: ${unsafeCSS(breakpoints.breakpointLg)}) {\n :host telia-label,\n :host alliance-paginator-button[page] {\n display: block;\n }\n\n :host alliance-page-selector {\n display: none;\n }\n }\n `;\n\n connectedCallback() {\n super.connectedCallback();\n\n this.currentPage = this.initialPage;\n this.pages = getPagination({\n itemCount: this.itemCount,\n pageSize: this.pageSize,\n siblingCount: this.siblingCount,\n currentPage: this.currentPage,\n });\n }\n\n attributeChangedCallback(name: string, _: string | null, value: string | null) {\n super.attributeChangedCallback(name, _, value);\n\n if (name === 'initial-page') {\n this.currentPage = this.initialPage;\n }\n\n this.pages = getPagination({\n itemCount: this.itemCount,\n pageSize: this.pageSize,\n siblingCount: this.siblingCount,\n currentPage: this.currentPage,\n [name]: value,\n });\n }\n\n @property({ type: Number, attribute: 'item-count' })\n itemCount: number = 0;\n\n @property({ type: Number, attribute: 'page-size' })\n pageSize: number = 50;\n\n @property({ type: Number, attribute: 'initial-page' })\n initialPage: number = 1;\n\n @property({ type: Number, attribute: 'sibling-count' })\n siblingCount: number = 2;\n\n @state()\n currentPage: number = this.initialPage;\n\n @state()\n pages: Pages = [];\n\n changePage = (nextPage: number) => {\n if (\n nextPage === this.currentPage || // Next page is the same\n nextPage < 1 || // Next page is 0\n nextPage > (this.pages[this.pages.length - 1] as number) // Next page is outside of available pages\n ) {\n return;\n }\n\n const event: ChangePageEvent = new CustomEvent('change-page', {\n bubbles: true,\n composed: true,\n detail: { nextPage, previousPage: this.currentPage },\n cancelable: true,\n });\n const defaultNotPrevented = this.dispatchEvent(event);\n\n if (defaultNotPrevented) {\n this.currentPage = nextPage;\n\n this.pages = getPagination({\n itemCount: this.itemCount,\n pageSize: this.pageSize,\n siblingCount: this.siblingCount,\n currentPage: this.currentPage,\n });\n }\n };\n\n next = () => {\n this.changePage(this.currentPage + 1);\n };\n\n previous = () => {\n this.changePage(this.currentPage - 1);\n };\n\n onPageSelect = (event: SelectPageEvent) => this.changePage(event.detail.nextPage);\n\n render() {\n return html`\n <alliance-paginator-button\n @click=${this.previous}\n ?disabled=${this.currentPage === 1}\n icon=\"left\"\n ></alliance-paginator-button>\n\n ${repeat(this.pages, (pageNumber) =>\n pageNumber === '...'\n ? html`<telia-label>...</telia-label>`\n : html`<alliance-paginator-button\n page=${pageNumber}\n @click=${() => this.changePage(pageNumber)}\n ?selected=${this.currentPage === pageNumber}\n ></alliance-paginator-button>`\n )}\n\n <alliance-page-selector\n current-page=${this.currentPage}\n last-page=${getLastPage(this.pages)}\n @select-page=${this.onPageSelect}\n >\n </alliance-page-selector>\n\n <alliance-paginator-button\n @click=${this.next}\n ?disabled=${this.currentPage === getLastPage(this.pages)}\n icon=\"right\"\n ></alliance-paginator-button>\n `;\n }\n}\n","import '@/voca/components/telia-button';\nimport '@/voca/components/telia-icon';\nimport { chevronLeft, chevronRight } from '@/voca/icons';\nimport { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nenum Icon {\n Left = 'left',\n Right = 'right',\n}\n\n@customElement('alliance-paginator-button')\nexport class PaginatorButton extends LitElement {\n @property({ type: Icon })\n icon?: Icon;\n\n @property({ type: String })\n page?: string;\n\n @property({ type: Boolean })\n selected: boolean = false;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @property({ type: Boolean })\n clickable: boolean = true;\n\n private renderContent() {\n if (this.icon === Icon.Left) {\n return html`<telia-icon size=\"sm\" svg=\"${chevronLeft.svg}\" />`;\n }\n\n if (this.icon === Icon.Right) {\n return html`<telia-icon size=\"sm\" svg=\"${chevronRight.svg}\" />`;\n }\n\n return html`<span>${this.page}</span>`;\n }\n\n render() {\n /*\n Ignore prettier on next line because Voca \n uses textContent on the telia-button element\n to detect whether or not it only contains an\n icon - which does not take account for white space...\n https://github.com/telia-company/design-system/issues/813\n */\n // prettier-ignore\n return html`<telia-button ?disabled=${this.disabled} variant=${this.selected ? 'primary' : 'tertiary-purple'}>${this.renderContent()}</telia-button> `;\n }\n}\n"],"names":["DOTS","range","start","end","length","_","idx","getLastPage","pages","listPages","lastPage","pageToSelectValue","page","selectValueToPage","selectValue","value","getPagination","itemCount","pageSize","siblingCount","currentPage","totalPageCount","leftSiblingIndex","rightSiblingIndex","shouldShowLeftDots","shouldShowRightDots","firstPageIndex","lastPageIndex","leftItemCount","rightItemCount","rightRange","middleRange","PageSelect","LitElement","nextPage","event","html","repeat","css","unsafeCSS","spacing","borders","colors","motion","focus","__decorateClass","property","customElement","Paginator","name","pageNumber","breakpoints","state","Icon","PaginatorButton","chevronLeft","chevronRight"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telia-ace/alliance-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.14-next.1",
|
|
4
4
|
"description": "UI components used by ACE Alliance apps.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"author": "Telia Company AB",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"@teliads/components": "^22.1.0"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@telia-ace/alliance-internal-client-utilities": "1.0.
|
|
48
|
-
"@telia-ace/alliance-internal-node-utilities": "1.0.
|
|
47
|
+
"@telia-ace/alliance-internal-client-utilities": "1.0.3-next.0",
|
|
48
|
+
"@telia-ace/alliance-internal-node-utilities": "1.0.3-next.3",
|
|
49
49
|
"@types/fs-extra": "^11.0.1",
|
|
50
50
|
"fs-extra": "^11.1.1",
|
|
51
51
|
"lit": "^2.7.6",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '@teliads/components/dist/components/telia-voca-stats';
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { p as a, H as r } from "../../chunks/index-eef143db.js";
|
|
2
|
-
const n = {
|
|
3
|
-
DK: "Denmark",
|
|
4
|
-
EE: "Estonia",
|
|
5
|
-
FI: "Finland",
|
|
6
|
-
LT: "Lithuania",
|
|
7
|
-
NO: "Norway",
|
|
8
|
-
SE: "Sweden",
|
|
9
|
-
Global: "Global"
|
|
10
|
-
};
|
|
11
|
-
Object.values(n);
|
|
12
|
-
const i = "https://stats.api.voca.teliacompany.com/components", l = /* @__PURE__ */ a(class extends r {
|
|
13
|
-
constructor() {
|
|
14
|
-
super(), this.__registerHost(), this.project = "", this.country = null, this.cache = /* @__PURE__ */ new Set();
|
|
15
|
-
}
|
|
16
|
-
handleVocaInternalUStats(o) {
|
|
17
|
-
if (window.location.hostname === "localhost")
|
|
18
|
-
try {
|
|
19
|
-
const t = n[this.country] || (() => {
|
|
20
|
-
throw new Error('telia-voca-stats "country" prop is invalid');
|
|
21
|
-
})(), s = `${o.detail.voca_component}-${o.detail.voca_added}`;
|
|
22
|
-
if (!this.cache.has(s) && this.project) {
|
|
23
|
-
const c = Object.assign({ voca_project: this.project, voca_country: t }, o.detail);
|
|
24
|
-
this.cache.add(s), fetch(i, {
|
|
25
|
-
method: "POST",
|
|
26
|
-
body: JSON.stringify(c)
|
|
27
|
-
}).then((e) => e.json()).catch((e) => {
|
|
28
|
-
console.error(e.body);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
} catch (t) {
|
|
32
|
-
console.error(t.message);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
render() {
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
}, [0, "telia-voca-stats", {
|
|
39
|
-
project: [1],
|
|
40
|
-
country: [1]
|
|
41
|
-
}, [[8, "vocaInternalUStats", "handleVocaInternalUStats"]]]);
|
|
42
|
-
function h() {
|
|
43
|
-
if (typeof customElements > "u")
|
|
44
|
-
return;
|
|
45
|
-
["telia-voca-stats"].forEach((t) => {
|
|
46
|
-
switch (t) {
|
|
47
|
-
case "telia-voca-stats":
|
|
48
|
-
customElements.get(t) || customElements.define(t, l);
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
h();
|
|
54
|
-
//# sourceMappingURL=telia-voca-stats.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"telia-voca-stats.js","sources":["../../../../node_modules/.pnpm/@teliads+components@22.1.0/node_modules/@teliads/components/dist/components/telia-voca-stats.js"],"sourcesContent":["import { proxyCustomElement, HTMLElement } from '@stencil/core/internal/client';\n\nconst Countries = {\n DK: 'Denmark',\n EE: 'Estonia',\n FI: 'Finland',\n LT: 'Lithuania',\n NO: 'Norway',\n SE: 'Sweden',\n Global: 'Global',\n};\nObject.values(Countries);\n\nconst API_STATS = 'https://stats.api.voca.teliacompany.com/components';\nconst TeliaVocaStats$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {\n constructor() {\n super();\n this.__registerHost();\n /** Name of the project. Project field is unique and required. To ensure uniqueness of this field,\n * please input it in correct format `'[projectsName]-[countryCode]'`. E.g., `'b2c-fi'`, `'b2c-ecom-fi'`, `'b2b-se'` */\n this.project = '';\n /** Country initials of the project, this prop is provided by the project that uses Voca DS.\n * Possible values: 'DK' | 'EE' | 'FI' | 'LT' | 'NO' | 'SE' | 'Global'. */\n this.country = null;\n // To avoid unneccessary logging, first leverage in-memeory Cache\n this.cache = new Set();\n }\n handleVocaInternalUStats(event) {\n if (window.location.hostname !== 'localhost') {\n return;\n }\n try {\n /** id is unique identifier for component,\n * it consists of components name, page url, projects name and projects country. */\n const country = Countries[this.country] ||\n (() => {\n throw new Error('telia-voca-stats \"country\" prop is invalid');\n })();\n const id = `${event.detail.voca_component}-${event.detail.voca_added}`;\n const exist = this.cache.has(id);\n if (!exist && this.project) {\n const body = Object.assign({ voca_project: this.project, voca_country: country }, event.detail);\n this.cache.add(id);\n // Post date to API\n // Sends Component usage stats data to AWS S3.\n fetch(API_STATS, {\n method: 'POST',\n body: JSON.stringify(body),\n })\n .then(response => {\n return response.json();\n })\n .catch((error) => {\n console.error(error.body);\n });\n }\n }\n catch (error) {\n console.error(error.message);\n }\n }\n render() {\n /** telia-voca-stats is not a component, so it returns null, instead of html. */\n return null;\n }\n}, [0, \"telia-voca-stats\", {\n \"project\": [1],\n \"country\": [1]\n }, [[8, \"vocaInternalUStats\", \"handleVocaInternalUStats\"]]]);\nfunction defineCustomElement$1() {\n if (typeof customElements === \"undefined\") {\n return;\n }\n const components = [\"telia-voca-stats\"];\n components.forEach(tagName => { switch (tagName) {\n case \"telia-voca-stats\":\n if (!customElements.get(tagName)) {\n customElements.define(tagName, TeliaVocaStats$1);\n }\n break;\n } });\n}\ndefineCustomElement$1();\n\nconst TeliaVocaStats = TeliaVocaStats$1;\nconst defineCustomElement = defineCustomElement$1;\n\nexport { TeliaVocaStats, defineCustomElement };\n"],"names":["Countries","API_STATS","TeliaVocaStats$1","proxyCustomElement","HTMLElement","event","country","id","body","response","error","defineCustomElement$1","tagName"],"mappings":";AAEA,MAAMA,IAAY;AAAA,EAChB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,QAAQ;AACV;AACA,OAAO,OAAOA,CAAS;AAEvB,MAAMC,IAAY,sDACZC,IAAiC,gBAAAC,EAAmB,cAAcC,EAAY;AAAA,EAClF,cAAc;AACZ,aACA,KAAK,eAAc,GAGnB,KAAK,UAAU,IAGf,KAAK,UAAU,MAEf,KAAK,QAAQ,oBAAI;EAClB;AAAA,EACD,yBAAyBC,GAAO;AAC9B,QAAI,OAAO,SAAS,aAAa;AAGjC,UAAI;AAGF,cAAMC,IAAUN,EAAU,KAAK,OAAO,MACnC,MAAM;AACL,gBAAM,IAAI,MAAM,4CAA4C;AAAA,QACtE,MACYO,IAAK,GAAGF,EAAM,OAAO,cAAc,IAAIA,EAAM,OAAO,UAAU;AAEpE,YAAI,CADU,KAAK,MAAM,IAAIE,CAAE,KACjB,KAAK,SAAS;AAC1B,gBAAMC,IAAO,OAAO,OAAO,EAAE,cAAc,KAAK,SAAS,cAAcF,EAAO,GAAID,EAAM,MAAM;AAC9F,eAAK,MAAM,IAAIE,CAAE,GAGjB,MAAMN,GAAW;AAAA,YACf,QAAQ;AAAA,YACR,MAAM,KAAK,UAAUO,CAAI;AAAA,UACnC,CAAS,EACE,KAAK,CAAAC,MACCA,EAAS,MACjB,EACE,MAAM,CAACC,MAAU;AAClB,oBAAQ,MAAMA,EAAM,IAAI;AAAA,UAClC,CAAS;AAAA,QACF;AAAA,MACF,SACMA,GAAO;AACZ,gBAAQ,MAAMA,EAAM,OAAO;AAAA,MAC5B;AAAA,EACF;AAAA,EACD,SAAS;AAEP,WAAO;AAAA,EACR;AACH,GAAG,CAAC,GAAG,oBAAoB;AAAA,EACvB,SAAW,CAAC,CAAC;AAAA,EACb,SAAW,CAAC,CAAC;AACjB,GAAK,CAAC,CAAC,GAAG,sBAAsB,0BAA0B,CAAC,CAAC,CAAC;AAC7D,SAASC,IAAwB;AAC/B,MAAI,OAAO,iBAAmB;AAC5B;AAGF,EADmB,CAAC,kBAAkB,EAC3B,QAAQ,CAAAC,MAAW;AAAE,YAAQA,GAAO;AAAA,MAC7C,KAAK;AACH,QAAK,eAAe,IAAIA,CAAO,KAC7B,eAAe,OAAOA,GAASV,CAAgB;AAEjD;AAAA,IACH;AAAA,EAAA,CAAE;AACL;AACAS,EAAuB;","x_google_ignoreList":[0]}
|