@pictogrammers/components 0.3.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/@types/css.d.ts +4 -0
- package/@types/html.d.ts +4 -0
- package/README.md +49 -0
- package/dist/main.js +3819 -0
- package/dist/pgAnnoy.js +116 -0
- package/dist/pgAvatar.js +136 -0
- package/dist/pgButton.js +116 -0
- package/dist/pgButtonGroup.js +116 -0
- package/dist/pgButtonLink.js +116 -0
- package/dist/pgButtonToggle.js +146 -0
- package/dist/pgCard.js +116 -0
- package/dist/pgCardUser.js +196 -0
- package/dist/pgColor.js +136 -0
- package/dist/pgDatabase.js +236 -0
- package/dist/pgDropdown.js +686 -0
- package/dist/pgGrid.js +126 -0
- package/dist/pgHeader.js +116 -0
- package/dist/pgIcon.js +116 -0
- package/dist/pgInputCheck.js +116 -0
- package/dist/pgInputCheckList.js +126 -0
- package/dist/pgInputFileLocal.js +116 -0
- package/dist/pgInputHexRgb.js +126 -0
- package/dist/pgInputRange.js +116 -0
- package/dist/pgInputSelect.js +116 -0
- package/dist/pgInputText.js +116 -0
- package/dist/pgInputTextIcon.js +176 -0
- package/dist/pgInputUserSelect.js +116 -0
- package/dist/pgListTag.js +136 -0
- package/dist/pgMarkdown.js +346 -0
- package/dist/pgMenuIcon.js +206 -0
- package/dist/pgModalAlert.js +126 -0
- package/dist/pgModification.js +396 -0
- package/dist/pgNav.js +116 -0
- package/dist/pgOverlay.js +96 -0
- package/dist/pgPicker.js +116 -0
- package/dist/pgPreview.js +116 -0
- package/dist/pgScroll.js +266 -0
- package/dist/pgSearch.js +146 -0
- package/dist/pgTab.js +116 -0
- package/dist/pgTabs.js +136 -0
- package/dist/pgToast.js +136 -0
- package/dist/pgToasts.js +136 -0
- package/dist/pgTooltip.js +126 -0
- package/index.html +302 -0
- package/package.json +25 -0
- package/pg/annoy/README.md +18 -0
- package/pg/annoy/__examples__/basic/basic.html +8 -0
- package/pg/annoy/__examples__/basic/basic.ts +11 -0
- package/pg/annoy/annoy.css +238 -0
- package/pg/annoy/annoy.html +59 -0
- package/pg/annoy/annoy.ts +48 -0
- package/pg/annoy/index.ts +3 -0
- package/pg/avatar/README.md +23 -0
- package/pg/avatar/__examples__/basic/basic.html +6 -0
- package/pg/avatar/__examples__/basic/basic.ts +41 -0
- package/pg/avatar/__examples__/basic/constants.ts +1 -0
- package/pg/avatar/avatar.css +45 -0
- package/pg/avatar/avatar.html +8 -0
- package/pg/avatar/avatar.spec.ts +51 -0
- package/pg/avatar/avatar.ts +37 -0
- package/pg/avatar/index.ts +3 -0
- package/pg/button/README.md +51 -0
- package/pg/button/__examples__/basic/basic.html +11 -0
- package/pg/button/__examples__/basic/basic.ts +11 -0
- package/pg/button/__examples__/states/states.html +8 -0
- package/pg/button/__examples__/states/states.ts +20 -0
- package/pg/button/button.css +91 -0
- package/pg/button/button.html +3 -0
- package/pg/button/button.ts +45 -0
- package/pg/button/index.ts +3 -0
- package/pg/buttonGroup/README.md +28 -0
- package/pg/buttonGroup/__examples__/basic/basic.html +12 -0
- package/pg/buttonGroup/__examples__/basic/basic.ts +11 -0
- package/pg/buttonGroup/buttonGroup.css +4 -0
- package/pg/buttonGroup/buttonGroup.html +1 -0
- package/pg/buttonGroup/buttonGroup.spec.ts +30 -0
- package/pg/buttonGroup/buttonGroup.ts +50 -0
- package/pg/buttonGroup/index.ts +3 -0
- package/pg/buttonLink/README.md +51 -0
- package/pg/buttonLink/__examples__/basic/basic.html +17 -0
- package/pg/buttonLink/__examples__/basic/basic.ts +11 -0
- package/pg/buttonLink/buttonLink.css +91 -0
- package/pg/buttonLink/buttonLink.html +3 -0
- package/pg/buttonLink/buttonLink.ts +46 -0
- package/pg/buttonLink/index.ts +3 -0
- package/pg/buttonToggle/README.md +54 -0
- package/pg/buttonToggle/__examples__/basic/basic.html +10 -0
- package/pg/buttonToggle/__examples__/basic/basic.ts +23 -0
- package/pg/buttonToggle/buttonToggle.css +8 -0
- package/pg/buttonToggle/buttonToggle.html +4 -0
- package/pg/buttonToggle/buttonToggle.ts +44 -0
- package/pg/buttonToggle/index.ts +3 -0
- package/pg/card/README.md +21 -0
- package/pg/card/__examples__/basic/basic.html +5 -0
- package/pg/card/__examples__/basic/basic.ts +11 -0
- package/pg/card/card.css +11 -0
- package/pg/card/card.html +3 -0
- package/pg/card/card.spec.ts +30 -0
- package/pg/card/card.ts +13 -0
- package/pg/card/index.ts +3 -0
- package/pg/cardUser/README.md +22 -0
- package/pg/cardUser/__examples__/basic/basic.html +3 -0
- package/pg/cardUser/__examples__/basic/basic.ts +30 -0
- package/pg/cardUser/__examples__/basic/constants.ts +1 -0
- package/pg/cardUser/cardUser.css +67 -0
- package/pg/cardUser/cardUser.html +23 -0
- package/pg/cardUser/cardUser.spec.ts +46 -0
- package/pg/cardUser/cardUser.ts +53 -0
- package/pg/cardUser/index.ts +3 -0
- package/pg/color/README.md +13 -0
- package/pg/color/__examples__/basic/basic.html +4 -0
- package/pg/color/__examples__/basic/basic.ts +20 -0
- package/pg/color/color.css +21 -0
- package/pg/color/color.html +1 -0
- package/pg/color/color.ts +97 -0
- package/pg/color/constants.ts +357 -0
- package/pg/color/index.ts +3 -0
- package/pg/color/utils.ts +27 -0
- package/pg/database/README.md +28 -0
- package/pg/database/__examples__/basic/basic.html +9 -0
- package/pg/database/__examples__/basic/basic.ts +37 -0
- package/pg/database/database.css +0 -0
- package/pg/database/database.html +0 -0
- package/pg/database/database.ts +42 -0
- package/pg/database/index.ts +3 -0
- package/pg/dropdown/README.md +13 -0
- package/pg/dropdown/__examples__/basic/basic.html +14 -0
- package/pg/dropdown/__examples__/basic/basic.ts +11 -0
- package/pg/dropdown/dropdown.css +46 -0
- package/pg/dropdown/dropdown.html +5 -0
- package/pg/dropdown/dropdown.ts +60 -0
- package/pg/dropdown/index.ts +3 -0
- package/pg/grid/README.md +97 -0
- package/pg/grid/__examples__/basic/basic.html +29 -0
- package/pg/grid/__examples__/basic/basic.ts +139 -0
- package/pg/grid/grid.css +68 -0
- package/pg/grid/grid.html +6 -0
- package/pg/grid/grid.spec.ts +66 -0
- package/pg/grid/grid.ts +417 -0
- package/pg/grid/index.ts +3 -0
- package/pg/header/README.md +23 -0
- package/pg/header/__examples__/basic/basic.html +8 -0
- package/pg/header/__examples__/basic/basic.ts +11 -0
- package/pg/header/header.css +42 -0
- package/pg/header/header.html +15 -0
- package/pg/header/header.ts +28 -0
- package/pg/header/index.ts +3 -0
- package/pg/icon/README.md +26 -0
- package/pg/icon/__examples__/basic/basic.html +16 -0
- package/pg/icon/__examples__/basic/basic.ts +34 -0
- package/pg/icon/__examples__/basic/constants.ts +2 -0
- package/pg/icon/icon.css +9 -0
- package/pg/icon/icon.html +3 -0
- package/pg/icon/icon.spec.ts +46 -0
- package/pg/icon/icon.ts +23 -0
- package/pg/icon/index.ts +3 -0
- package/pg/inputCheck/README.md +32 -0
- package/pg/inputCheck/__examples__/basic/basic.html +8 -0
- package/pg/inputCheck/__examples__/basic/basic.ts +23 -0
- package/pg/inputCheck/index.ts +3 -0
- package/pg/inputCheck/inputCheck.css +45 -0
- package/pg/inputCheck/inputCheck.html +6 -0
- package/pg/inputCheck/inputCheck.ts +42 -0
- package/pg/inputCheckList/README.md +35 -0
- package/pg/inputCheckList/__examples__/basic/basic.html +4 -0
- package/pg/inputCheckList/__examples__/basic/basic.ts +31 -0
- package/pg/inputCheckList/index.ts +3 -0
- package/pg/inputCheckList/inputCheckList.css +70 -0
- package/pg/inputCheckList/inputCheckList.html +1 -0
- package/pg/inputCheckList/inputCheckList.ts +103 -0
- package/pg/inputCheckList/templates/option.html +8 -0
- package/pg/inputFileLocal/README.md +30 -0
- package/pg/inputFileLocal/__examples__/basic/basic.html +4 -0
- package/pg/inputFileLocal/__examples__/basic/basic.ts +23 -0
- package/pg/inputFileLocal/index.ts +3 -0
- package/pg/inputFileLocal/inputFileLocal.css +80 -0
- package/pg/inputFileLocal/inputFileLocal.html +5 -0
- package/pg/inputFileLocal/inputFileLocal.ts +82 -0
- package/pg/inputHexRgb/README.md +15 -0
- package/pg/inputHexRgb/__examples__/basic/basic.html +4 -0
- package/pg/inputHexRgb/__examples__/basic/basic.ts +23 -0
- package/pg/inputHexRgb/index.ts +3 -0
- package/pg/inputHexRgb/inputHexRgb.css +96 -0
- package/pg/inputHexRgb/inputHexRgb.html +9 -0
- package/pg/inputHexRgb/inputHexRgb.ts +79 -0
- package/pg/inputHexRgb/utils.ts +27 -0
- package/pg/inputRange/README.md +18 -0
- package/pg/inputRange/__examples__/basic/basic.html +9 -0
- package/pg/inputRange/__examples__/basic/basic.ts +30 -0
- package/pg/inputRange/index.ts +3 -0
- package/pg/inputRange/inputRange.css +0 -0
- package/pg/inputRange/inputRange.html +1 -0
- package/pg/inputRange/inputRange.ts +53 -0
- package/pg/inputSelect/README.md +25 -0
- package/pg/inputSelect/__examples__/basic/basic.html +6 -0
- package/pg/inputSelect/__examples__/basic/basic.ts +30 -0
- package/pg/inputSelect/index.ts +3 -0
- package/pg/inputSelect/inputSelect.css +36 -0
- package/pg/inputSelect/inputSelect.html +4 -0
- package/pg/inputSelect/inputSelect.ts +57 -0
- package/pg/inputText/README.md +27 -0
- package/pg/inputText/__examples__/basic/basic.html +9 -0
- package/pg/inputText/__examples__/basic/basic.ts +30 -0
- package/pg/inputText/index.ts +3 -0
- package/pg/inputText/inputText.css +20 -0
- package/pg/inputText/inputText.html +1 -0
- package/pg/inputText/inputText.spec.ts +59 -0
- package/pg/inputText/inputText.ts +59 -0
- package/pg/inputTextIcon/README.md +26 -0
- package/pg/inputTextIcon/index.ts +3 -0
- package/pg/inputTextIcon/inputTextIcon.css +24 -0
- package/pg/inputTextIcon/inputTextIcon.html +4 -0
- package/pg/inputTextIcon/inputTextIcon.spec.ts +44 -0
- package/pg/inputTextIcon/inputTextIcon.ts +26 -0
- package/pg/inputUserSelect/README.md +31 -0
- package/pg/inputUserSelect/__examples__/basic/basic.html +4 -0
- package/pg/inputUserSelect/__examples__/basic/basic.ts +25 -0
- package/pg/inputUserSelect/__examples__/basic/constants.ts +33 -0
- package/pg/inputUserSelect/index.ts +3 -0
- package/pg/inputUserSelect/inputUserSelect.css +174 -0
- package/pg/inputUserSelect/inputUserSelect.html +18 -0
- package/pg/inputUserSelect/inputUserSelect.ts +266 -0
- package/pg/listTag/README.md +26 -0
- package/pg/listTag/__examples__/basic/basic.html +16 -0
- package/pg/listTag/__examples__/basic/basic.ts +53 -0
- package/pg/listTag/__examples__/basic/constants.ts +22 -0
- package/pg/listTag/index.ts +3 -0
- package/pg/listTag/listTag.css +9 -0
- package/pg/listTag/listTag.html +1 -0
- package/pg/listTag/listTag.ts +48 -0
- package/pg/listTag/partials/tag.html +3 -0
- package/pg/markdown/README.md +13 -0
- package/pg/markdown/__examples__/basic/basic.html +3 -0
- package/pg/markdown/__examples__/basic/basic.ts +51 -0
- package/pg/markdown/__examples__/basic/constants.ts +129 -0
- package/pg/markdown/index.ts +5 -0
- package/pg/markdown/markdown.css +760 -0
- package/pg/markdown/markdown.html +1 -0
- package/pg/markdown/markdown.md +123 -0
- package/pg/markdown/markdown.spec.ts +87 -0
- package/pg/markdown/markdown.ts +381 -0
- package/pg/markdown/markdownReplace.ts +7 -0
- package/pg/menuIcon/README.md +13 -0
- package/pg/menuIcon/__examples__/basic/basic.html +3 -0
- package/pg/menuIcon/__examples__/basic/basic.ts +15 -0
- package/pg/menuIcon/index.ts +3 -0
- package/pg/menuIcon/menuIcon.css +168 -0
- package/pg/menuIcon/menuIcon.html +64 -0
- package/pg/menuIcon/menuIcon.ts +271 -0
- package/pg/modalAlert/README.md +17 -0
- package/pg/modalAlert/__examples__/basic/basic.html +4 -0
- package/pg/modalAlert/__examples__/basic/basic.ts +27 -0
- package/pg/modalAlert/index.ts +3 -0
- package/pg/modalAlert/modalAlert.css +43 -0
- package/pg/modalAlert/modalAlert.html +22 -0
- package/pg/modalAlert/modalAlert.ts +45 -0
- package/pg/modification/README.md +34 -0
- package/pg/modification/__examples__/basic/basic.html +8 -0
- package/pg/modification/__examples__/basic/basic.ts +63 -0
- package/pg/modification/__examples__/basic/constants.ts +416 -0
- package/pg/modification/index.ts +3 -0
- package/pg/modification/modification.css +311 -0
- package/pg/modification/modification.html +1 -0
- package/pg/modification/modification.spec.ts +33 -0
- package/pg/modification/modification.ts +201 -0
- package/pg/modification/type/date.html +1 -0
- package/pg/modification/type/iconAliasCreated.html +13 -0
- package/pg/modification/type/iconAliasDeleted.html +13 -0
- package/pg/modification/type/iconAuthorModified.html +13 -0
- package/pg/modification/type/iconCreated.html +13 -0
- package/pg/modification/type/iconDeleted.html +13 -0
- package/pg/modification/type/iconDeprecated.html +13 -0
- package/pg/modification/type/iconDescriptionModified.html +10 -0
- package/pg/modification/type/iconModified.html +14 -0
- package/pg/modification/type/iconRenamed.html +13 -0
- package/pg/modification/type/iconTagCreated.html +13 -0
- package/pg/modification/type/iconTagDeleted.html +13 -0
- package/pg/modification/type/news.html +5 -0
- package/pg/nav/README.md +16 -0
- package/pg/nav/__examples__/basic/basic.html +5 -0
- package/pg/nav/__examples__/basic/basic.ts +11 -0
- package/pg/nav/index.ts +3 -0
- package/pg/nav/nav.css +14 -0
- package/pg/nav/nav.html +16 -0
- package/pg/nav/nav.ts +21 -0
- package/pg/overlay/README.md +37 -0
- package/pg/overlay/__examples__/basic/basic.css +3 -0
- package/pg/overlay/__examples__/basic/basic.html +3 -0
- package/pg/overlay/__examples__/basic/basic.ts +13 -0
- package/pg/overlay/index.ts +3 -0
- package/pg/overlay/overlay.ts +26 -0
- package/pg/picker/README.md +13 -0
- package/pg/picker/index.ts +3 -0
- package/pg/picker/picker.css +56 -0
- package/pg/picker/picker.html +8 -0
- package/pg/picker/picker.ts +66 -0
- package/pg/preview/README.md +19 -0
- package/pg/preview/__examples__/basic/basic.html +11 -0
- package/pg/preview/__examples__/basic/basic.ts +22 -0
- package/pg/preview/index.ts +3 -0
- package/pg/preview/preview.css +34 -0
- package/pg/preview/preview.html +5 -0
- package/pg/preview/preview.ts +38 -0
- package/pg/scroll/README.md +42 -0
- package/pg/scroll/__examples__/basic/basic.css +4 -0
- package/pg/scroll/__examples__/basic/basic.html +11 -0
- package/pg/scroll/__examples__/basic/basic.ts +88 -0
- package/pg/scroll/index.ts +3 -0
- package/pg/scroll/scroll.css +7 -0
- package/pg/scroll/scroll.html +3 -0
- package/pg/scroll/scroll.ts +158 -0
- package/pg/search/README.md +59 -0
- package/pg/search/__examples__/basic/basic.html +3 -0
- package/pg/search/__examples__/basic/basic.ts +29 -0
- package/pg/search/__examples__/basic/constants.ts +3 -0
- package/pg/search/index.ts +3 -0
- package/pg/search/search.css +188 -0
- package/pg/search/search.html +18 -0
- package/pg/search/search.ts +252 -0
- package/pg/search/utils.ts +12 -0
- package/pg/shared/README.md +28 -0
- package/pg/shared/copy.ts +25 -0
- package/pg/shared/database.ts +35 -0
- package/pg/shared/databaseService.ts +230 -0
- package/pg/shared/debounce.ts +12 -0
- package/pg/shared/enums/modificationType.ts +19 -0
- package/pg/shared/filter.ts +14 -0
- package/pg/shared/http.ts +83 -0
- package/pg/shared/iconFilter.spec.ts +61 -0
- package/pg/shared/iconFilter.ts +71 -0
- package/pg/shared/list.ts +34 -0
- package/pg/shared/models/alias.ts +40 -0
- package/pg/shared/models/font.ts +31 -0
- package/pg/shared/models/fontIcon.ts +25 -0
- package/pg/shared/models/fontVersion.ts +22 -0
- package/pg/shared/models/icon.ts +97 -0
- package/pg/shared/models/modification.ts +45 -0
- package/pg/shared/models/style.ts +12 -0
- package/pg/shared/models/tag.ts +37 -0
- package/pg/shared/models/user.ts +35 -0
- package/pg/shared/models/version.ts +20 -0
- package/pg/shared/removeDiacritics.ts +94 -0
- package/pg/shared/toast.ts +47 -0
- package/pg/shared/uuid.ts +6 -0
- package/pg/tab/README.md +18 -0
- package/pg/tab/index.ts +3 -0
- package/pg/tab/tab.css +13 -0
- package/pg/tab/tab.html +3 -0
- package/pg/tab/tab.ts +51 -0
- package/pg/tabs/README.md +31 -0
- package/pg/tabs/__examples__/basic/basic.html +13 -0
- package/pg/tabs/__examples__/basic/basic.ts +11 -0
- package/pg/tabs/index.ts +3 -0
- package/pg/tabs/partials/tab.html +3 -0
- package/pg/tabs/tabs.css +69 -0
- package/pg/tabs/tabs.html +4 -0
- package/pg/tabs/tabs.ts +102 -0
- package/pg/toast/README.md +13 -0
- package/pg/toast/index.ts +3 -0
- package/pg/toast/toast.css +112 -0
- package/pg/toast/toast.html +13 -0
- package/pg/toast/toast.ts +39 -0
- package/pg/toasts/README.md +37 -0
- package/pg/toasts/__examples__/basic/basic.html +11 -0
- package/pg/toasts/__examples__/basic/basic.ts +86 -0
- package/pg/toasts/index.ts +3 -0
- package/pg/toasts/toasts.css +8 -0
- package/pg/toasts/toasts.html +1 -0
- package/pg/toasts/toasts.ts +51 -0
- package/pg/tooltip/README.md +51 -0
- package/pg/tooltip/__examples__/basic/basic.css +38 -0
- package/pg/tooltip/__examples__/basic/basic.html +21 -0
- package/pg/tooltip/__examples__/basic/basic.ts +55 -0
- package/pg/tooltip/addTooltip.ts +31 -0
- package/pg/tooltip/index.ts +20 -0
- package/pg/tooltip/position.ts +15 -0
- package/pg/tooltip/tooltip.css +36 -0
- package/pg/tooltip/tooltip.html +4 -0
- package/pg/tooltip/tooltip.ts +170 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { selectComponent, getAttributes } from '@pictogrammers/element';
|
|
2
|
+
|
|
3
|
+
import './avatar';
|
|
4
|
+
import PgAvatar from './avatar';
|
|
5
|
+
|
|
6
|
+
import { User } from '../shared/models/user';
|
|
7
|
+
|
|
8
|
+
const PG_AVATAR = 'pg-avatar';
|
|
9
|
+
const AVATAR = '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';
|
|
10
|
+
const DEFAULT_AVATAR = 'data:image/png;base64,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';
|
|
11
|
+
|
|
12
|
+
describe('pg-avatar', () => {
|
|
13
|
+
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
var c = document.createElement(PG_AVATAR);
|
|
16
|
+
document.body.appendChild(c);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
while (document.body.firstChild) {
|
|
21
|
+
document.body.removeChild(document.body.firstChild);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('should be registered', () => {
|
|
26
|
+
expect(customElements.get(PG_AVATAR)).toBeDefined();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('should only expose known props', () => {
|
|
30
|
+
const props = getAttributes(PG_AVATAR)
|
|
31
|
+
expect(props.length).toBe(1);
|
|
32
|
+
expect(props).toContain('user');
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('should default avatar picture', () => {
|
|
36
|
+
const component = selectComponent<PgAvatar>(PG_AVATAR);
|
|
37
|
+
const { $img } = component;
|
|
38
|
+
expect($img.getAttribute('src')).toEqual(DEFAULT_AVATAR);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('img should be set', async () => {
|
|
42
|
+
const component = selectComponent<PgAvatar>(PG_AVATAR);
|
|
43
|
+
const { $img } = component;
|
|
44
|
+
const user = new User();
|
|
45
|
+
const encoded = `data:image/png;base64,${AVATAR}`;
|
|
46
|
+
user.base64 = encoded;
|
|
47
|
+
component.user = user;
|
|
48
|
+
expect($img.getAttribute('src')).toEqual(encoded);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Component, Prop, Part } from '@pictogrammers/element';
|
|
2
|
+
|
|
3
|
+
import template from './avatar.html';
|
|
4
|
+
import style from './avatar.css';
|
|
5
|
+
|
|
6
|
+
import { User } from '../shared/models/user';
|
|
7
|
+
import { addTooltip } from '../tooltip/addTooltip';
|
|
8
|
+
|
|
9
|
+
const noAvatar = 'data:image/png;base64,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';
|
|
10
|
+
|
|
11
|
+
@Component({
|
|
12
|
+
selector: 'pg-avatar',
|
|
13
|
+
style,
|
|
14
|
+
template
|
|
15
|
+
})
|
|
16
|
+
export default class PgAvatar extends HTMLElement {
|
|
17
|
+
@Prop() user: User = new User();
|
|
18
|
+
|
|
19
|
+
@Part() $img: HTMLImageElement;
|
|
20
|
+
@Part() $sponsored: HTMLAnchorElement;
|
|
21
|
+
|
|
22
|
+
connectedCallback() {
|
|
23
|
+
addTooltip(this.$sponsored, () => {
|
|
24
|
+
return `Sponsor ${this.user.name} on GitHub`;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
render(changes) {
|
|
29
|
+
if (changes.user) {
|
|
30
|
+
this.$img.src = this.user.base64 || noAvatar;
|
|
31
|
+
this.$sponsored.style.display = this.user.sponsored ? 'flex' : 'none';
|
|
32
|
+
if (this.user.sponsored) {
|
|
33
|
+
this.$sponsored.href = `https://github.com/sponsors/${this.user.github}`;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# `<pg-button>`
|
|
2
|
+
|
|
3
|
+
The `pg-button` component is essentially just a styled button, but it also allows special rendering for `pg-button-group` and `pg-icon`.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import '@pictogrammers/components/pg/button';
|
|
7
|
+
import PgButton from '@pictogrammers/components/pg/button';
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
```html
|
|
11
|
+
<pg-button>Click Me!</pg-button>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
| Slots | Tested | Description |
|
|
15
|
+
| ----------- | -------- | ----------- |
|
|
16
|
+
| default | ✅ | Button contents. |
|
|
17
|
+
|
|
18
|
+
| Attribute | Tested | Description |
|
|
19
|
+
| ---------- | -------- | ----------- |
|
|
20
|
+
| block | | block sizing |
|
|
21
|
+
| active | | Depressed visual state. |
|
|
22
|
+
| start | | Internal Only |
|
|
23
|
+
| end | | Internal Only |
|
|
24
|
+
| center | | Internal Only |
|
|
25
|
+
|
|
26
|
+
| Events | Tested | Description |
|
|
27
|
+
| ---------- | -------- | ----------- |
|
|
28
|
+
| click | ✅ | Standard click. |
|
|
29
|
+
|
|
30
|
+
| CSS Variables | Default | Description |
|
|
31
|
+
| ------------------- | --------- | ----------- |
|
|
32
|
+
| `--pg-button-color` | `#453C4F` | Text color |
|
|
33
|
+
| `--pg-button-background-color` | `#fff` | Background color |
|
|
34
|
+
| `--pg-button-border-color` | `#453C4F` | Border color |
|
|
35
|
+
| `--pg-button-hover-color` | `#fff` | `:hover` Text color |
|
|
36
|
+
| `--pg-button-hover-background-color` | `#453C4F` | `:hover` Background color |
|
|
37
|
+
| `--pg-button-hover-border-color` | `#453C4F` | `:hover` Border color |
|
|
38
|
+
| `--pg-button-active-color` | `#fff` | `active` Text color |
|
|
39
|
+
| `--pg-button-active-background-color` | `#453C4F` | `active` Background color |
|
|
40
|
+
| `--pg-button-active-border-color` | `#453C4F` | `active` Border color |
|
|
41
|
+
|
|
42
|
+
### Slots
|
|
43
|
+
|
|
44
|
+
Special styling is applied for `pg-icon`.
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<pg-button>
|
|
48
|
+
<pg-icon path="M...Z"></pg-icon>
|
|
49
|
+
Hello!
|
|
50
|
+
</pg-button>
|
|
51
|
+
```
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<div class="example">
|
|
2
|
+
<div class="example-flex">
|
|
3
|
+
<pg-button>Example Button</pg-button>
|
|
4
|
+
<pg-button><pg-icon path="M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z"></pg-icon></pg-button>
|
|
5
|
+
<pg-button>
|
|
6
|
+
<pg-icon path="M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z"></pg-icon>
|
|
7
|
+
With Icon
|
|
8
|
+
</pg-button>
|
|
9
|
+
</div>
|
|
10
|
+
<pg-button block>Block Button</pg-button>
|
|
11
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Component, Part, Prop } from '@pictogrammers/element';
|
|
2
|
+
import PgButton from '../../button';
|
|
3
|
+
|
|
4
|
+
import template from './states.html';
|
|
5
|
+
|
|
6
|
+
@Component({
|
|
7
|
+
selector: 'x-pg-button-states',
|
|
8
|
+
template
|
|
9
|
+
})
|
|
10
|
+
export default class XPgButtonStates extends HTMLElement {
|
|
11
|
+
@Part() $active: PgButton;
|
|
12
|
+
|
|
13
|
+
connectedCallback() {
|
|
14
|
+
this.$active.addEventListener('click', this.handleActive.bind(this));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
handleActive() {
|
|
18
|
+
this.$active.active = !this.$active.active;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: flex;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
[part="button"] {
|
|
6
|
+
display: inline-flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
align-content: center;
|
|
9
|
+
font-family: var(--pg-font-family);
|
|
10
|
+
font-size: 1rem;
|
|
11
|
+
line-height: 1.5rem;
|
|
12
|
+
border: 1px solid var(--pg-button-border-color, #453C4F);
|
|
13
|
+
background-color: var(--pg-button-background-color, #fff);
|
|
14
|
+
color: var(--pg-button-color, #453C4F);
|
|
15
|
+
padding: var(--pg-button-padding, 0.25rem 0.5rem);
|
|
16
|
+
border-radius: 0.25rem;
|
|
17
|
+
outline: none;
|
|
18
|
+
--pg-icon-color: var(--pg-button-color, #453C4F);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
[part="button"]:hover {
|
|
22
|
+
border: 1px solid var(--pg-button-hover-border-color, #453C4F);
|
|
23
|
+
background-color: var(--pg-button-hover-background-color, #453C4F);
|
|
24
|
+
color: var(--pg-button-hover-color, #fff);
|
|
25
|
+
--pg-icon-color: var(--pg-button-hover-color, #fff);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
[part="button"]:active {
|
|
29
|
+
box-shadow: 0 1px 0.25rem rgba(0, 0, 0, 0.5) inset;
|
|
30
|
+
position: relative;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
[part="button"]:focus {
|
|
34
|
+
position: relative;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
[part="button"]:active::before {
|
|
38
|
+
content: '';
|
|
39
|
+
position: absolute;
|
|
40
|
+
top: -1px;
|
|
41
|
+
right: -1px;
|
|
42
|
+
bottom: -1px;
|
|
43
|
+
left: -1px;
|
|
44
|
+
border-radius: 0.25rem;
|
|
45
|
+
box-shadow: 0 0 0 3px var(--pg-search-focus-glow, rgb(79, 143, 249, 0.6));
|
|
46
|
+
}
|
|
47
|
+
[part="button"]:focus::before {
|
|
48
|
+
content: '';
|
|
49
|
+
position: absolute;
|
|
50
|
+
top: -1px;
|
|
51
|
+
right: -1px;
|
|
52
|
+
bottom: -1px;
|
|
53
|
+
left: -1px;
|
|
54
|
+
border-radius: 0.25rem;
|
|
55
|
+
box-shadow: 0 0 0 3px var(--pg-search-focus-glow, rgb(79, 143, 249, 0.5));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
[part="button"].start {
|
|
59
|
+
border-top-right-radius: 0;
|
|
60
|
+
border-bottom-right-radius: 0;
|
|
61
|
+
margin-right: -1px;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
[part="button"].center {
|
|
65
|
+
border-radius: 0;
|
|
66
|
+
margin-right: -1px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
[part="button"].end {
|
|
70
|
+
border-top-left-radius: 0;
|
|
71
|
+
border-bottom-left-radius: 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
[part="button"].active {
|
|
75
|
+
box-shadow: 0 1px 0.25rem rgba(0, 0, 0, 0.5) inset;
|
|
76
|
+
background-color: rgba(69, 60, 79, 0.1);
|
|
77
|
+
color: var(--pg-button-color, #453C4F);
|
|
78
|
+
}
|
|
79
|
+
[part="button"].active:hover {
|
|
80
|
+
box-shadow: 0 1px 0.25rem rgba(0, 0, 0, 0.5) inset;
|
|
81
|
+
background-color: var(--pg-button-color, #453C4F);
|
|
82
|
+
color: var(--pg-button-hover-color, #fff);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
[part="button"].block {
|
|
86
|
+
flex: 1;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
::slotted {
|
|
90
|
+
align-self: center;
|
|
91
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Component, Part, Prop } from '@pictogrammers/element';
|
|
2
|
+
|
|
3
|
+
import template from './button.html';
|
|
4
|
+
import style from './button.css';
|
|
5
|
+
|
|
6
|
+
@Component({
|
|
7
|
+
selector: 'pg-button',
|
|
8
|
+
style,
|
|
9
|
+
template
|
|
10
|
+
})
|
|
11
|
+
export default class PgButton extends HTMLElement {
|
|
12
|
+
@Prop() active: string | boolean = false;
|
|
13
|
+
@Prop() block: string | boolean = false;
|
|
14
|
+
@Prop() start: string | boolean = false;
|
|
15
|
+
@Prop() center: string | boolean = false;
|
|
16
|
+
@Prop() end: string | boolean = false;
|
|
17
|
+
|
|
18
|
+
@Part() $button: HTMLButtonElement;
|
|
19
|
+
|
|
20
|
+
connectedCallback() {
|
|
21
|
+
this.$button.addEventListener('click', (e) => {
|
|
22
|
+
e.stopPropagation();
|
|
23
|
+
this.dispatchEvent(new CustomEvent('click'));
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
render(changes) {
|
|
28
|
+
const t = [true, 'true', ''];
|
|
29
|
+
if (changes.active) {
|
|
30
|
+
this.$button.classList.toggle('active', t.includes(this.active));
|
|
31
|
+
}
|
|
32
|
+
if (changes.start) {
|
|
33
|
+
this.$button.classList.toggle('start', t.includes(this.start));
|
|
34
|
+
}
|
|
35
|
+
if (changes.end) {
|
|
36
|
+
this.$button.classList.toggle('end', t.includes(this.end));
|
|
37
|
+
}
|
|
38
|
+
if (changes.center) {
|
|
39
|
+
this.$button.classList.toggle('center', t.includes(this.center));
|
|
40
|
+
}
|
|
41
|
+
if (changes.block) {
|
|
42
|
+
this.$button.classList.toggle('block', t.includes(this.block));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# `<pg-button-group>`
|
|
2
|
+
|
|
3
|
+
The `pg-button-group` wraps the `pg-button` component.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import '@pictogrammers/components/pg/buttonGroup';
|
|
7
|
+
import PgButtonGroup from '@pictogrammers/components/pg/buttonGroup';
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
```html
|
|
11
|
+
<pg-button-group>
|
|
12
|
+
<pg-button active>Hello</pg-button>
|
|
13
|
+
<pg-button>World</pg-button>
|
|
14
|
+
</pg-button-group>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Slots
|
|
18
|
+
|
|
19
|
+
Special styling is applied for `pg-button`.
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<pg-button-group>
|
|
23
|
+
<pg-button>
|
|
24
|
+
<pg-icon path="M...Z"></pg-icon>
|
|
25
|
+
With Icons
|
|
26
|
+
</pg-button>
|
|
27
|
+
</pg-button-group>
|
|
28
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<div class="example example-flex">
|
|
2
|
+
<pg-button-group>
|
|
3
|
+
<pg-button><pg-icon path="M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z"></pg-icon></pg-button>
|
|
4
|
+
<pg-button>
|
|
5
|
+
<pg-icon path="M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z"></pg-icon>
|
|
6
|
+
With Icon
|
|
7
|
+
</pg-button>
|
|
8
|
+
<pg-button active>
|
|
9
|
+
active
|
|
10
|
+
</pg-button>
|
|
11
|
+
</pg-button-group>
|
|
12
|
+
</div>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<slot part="slot"></slot>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { selectComponent, getAttributes } from '@pictogrammers/element';
|
|
2
|
+
|
|
3
|
+
import './buttonGroup';
|
|
4
|
+
import PgButtonGroup from './buttonGroup';
|
|
5
|
+
|
|
6
|
+
const PG_BUTTON_GROUP = 'pg-button-group';
|
|
7
|
+
|
|
8
|
+
describe('pg-button-group', () => {
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
var c = document.createElement(PG_BUTTON_GROUP);
|
|
12
|
+
document.body.appendChild(c);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
while (document.body.firstChild) {
|
|
17
|
+
document.body.removeChild(document.body.firstChild);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('should be registered', () => {
|
|
22
|
+
expect(customElements.get(PG_BUTTON_GROUP)).toBeDefined();
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('should only expose known props', () => {
|
|
26
|
+
const props = getAttributes(PG_BUTTON_GROUP);
|
|
27
|
+
expect(props.length).toBe(0);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Component, Part, Prop } from '@pictogrammers/element';
|
|
2
|
+
|
|
3
|
+
import template from './buttonGroup.html';
|
|
4
|
+
import style from './buttonGroup.css';
|
|
5
|
+
import PgButton from '../button/button';
|
|
6
|
+
import PgButtonLink from '../buttonLink/buttonLink';
|
|
7
|
+
|
|
8
|
+
const PG_BUTTON = 'PG-BUTTON';
|
|
9
|
+
const PG_BUTTON_LINK = 'PG-BUTTON-LINK';
|
|
10
|
+
|
|
11
|
+
function isButton(ele: PgButton | PgButtonLink) {
|
|
12
|
+
return ele.tagName === PG_BUTTON || ele.tagName === PG_BUTTON_LINK;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@Component({
|
|
16
|
+
selector: 'pg-button-group',
|
|
17
|
+
style,
|
|
18
|
+
template
|
|
19
|
+
})
|
|
20
|
+
export default class PgButtonGroup extends HTMLElement {
|
|
21
|
+
@Part() $slot: HTMLSlotElement;
|
|
22
|
+
|
|
23
|
+
connectedCallback() {
|
|
24
|
+
this.$slot.addEventListener('slotchange', this.handleSlotChange.bind(this))
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
handleSlotChange(e) {
|
|
28
|
+
const elements = this.$slot.assignedElements();
|
|
29
|
+
if (elements.length !== 0) {
|
|
30
|
+
const first = elements[0] as PgButton;
|
|
31
|
+
if (isButton(first)) {
|
|
32
|
+
first.start = true;
|
|
33
|
+
}
|
|
34
|
+
const last = elements[elements.length - 1] as PgButton;
|
|
35
|
+
if (isButton(last)) {
|
|
36
|
+
last.end = true;
|
|
37
|
+
}
|
|
38
|
+
for (let i = 0; i < elements.length; i++) {
|
|
39
|
+
const element = elements[i] as PgButton;
|
|
40
|
+
if (isButton(element)) {
|
|
41
|
+
element.center = !element.start && !element.end;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
render(changes) {
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# `<pg-button>`
|
|
2
|
+
|
|
3
|
+
The `pg-button-link` component is essentially just a styled anchor, but it also allows special rendering for `pg-button-group` and `pg-icon`.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import '@pictogrammers/components/pg/buttonLink';
|
|
7
|
+
import PgButtonLink from '@pictogrammers/components/pg/buttonLink';
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
```html
|
|
11
|
+
<pg-button-link>Click Me!</pg-button-link>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
| Slots | Tested | Description |
|
|
15
|
+
| ----------- | -------- | ----------- |
|
|
16
|
+
| default | ✅ | Button contents. |
|
|
17
|
+
|
|
18
|
+
| Attribute | Tested | Description |
|
|
19
|
+
| ---------- | -------- | ----------- |
|
|
20
|
+
| block | | block sizing |
|
|
21
|
+
| active | | Depressed visual state. |
|
|
22
|
+
| start | | Internal Only |
|
|
23
|
+
| end | | Internal Only |
|
|
24
|
+
| center | | Internal Only |
|
|
25
|
+
|
|
26
|
+
| Events | Tested | Description |
|
|
27
|
+
| ---------- | -------- | ----------- |
|
|
28
|
+
| click | ✅ | Standard click. |
|
|
29
|
+
|
|
30
|
+
| CSS Variables | Default | Description |
|
|
31
|
+
| ------------------- | --------- | ----------- |
|
|
32
|
+
| `--pg-button-color` | `#453C4F` | Text color |
|
|
33
|
+
| `--pg-button-background-color` | `#fff` | Background color |
|
|
34
|
+
| `--pg-button-border-color` | `#453C4F` | Border color |
|
|
35
|
+
| `--pg-button-hover-color` | `#fff` | `:hover` Text color |
|
|
36
|
+
| `--pg-button-hover-background-color` | `#453C4F` | `:hover` Background color |
|
|
37
|
+
| `--pg-button-hover-border-color` | `#453C4F` | `:hover` Border color |
|
|
38
|
+
| `--pg-button-active-color` | `#fff` | `active` Text color |
|
|
39
|
+
| `--pg-button-active-background-color` | `#453C4F` | `active` Background color |
|
|
40
|
+
| `--pg-button-active-border-color` | `#453C4F` | `active` Border color |
|
|
41
|
+
|
|
42
|
+
### Slots
|
|
43
|
+
|
|
44
|
+
Special styling is applied for `pg-icon`.
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<pg-button-link>
|
|
48
|
+
<pg-icon path="M...Z"></pg-icon>
|
|
49
|
+
Hello!
|
|
50
|
+
</pg-button-link>
|
|
51
|
+
```
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<div class="example">
|
|
2
|
+
<div class="example-flex">
|
|
3
|
+
<pg-button-link href="#test">Example Button Link</pg-button-link>
|
|
4
|
+
<pg-button-link href="#test">
|
|
5
|
+
<pg-icon
|
|
6
|
+
path="M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z">
|
|
7
|
+
</pg-icon>
|
|
8
|
+
</pg-button-link>
|
|
9
|
+
<pg-button-link href="#test">
|
|
10
|
+
<pg-icon
|
|
11
|
+
path="M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z">
|
|
12
|
+
</pg-icon>
|
|
13
|
+
With Icon
|
|
14
|
+
</pg-button-link>
|
|
15
|
+
</div>
|
|
16
|
+
<pg-button-link href="#test" block>Block Button Link</pg-button-link>
|
|
17
|
+
</div>
|