From d8abb5e706ded199255623083e6e63187e4e3a42 Mon Sep 17 00:00:00 2001 From: Damien Pellier Date: Fri, 5 Apr 2024 11:35:01 +0200 Subject: [PATCH] refactor(icon): use font instead of svg --- .../tests/_app/src/components/ods-icon.tsx | 2 +- packages/ods/src/components/icon/TODO.md | 7 - .../icon/src/assets/icons.data.json | 4 - .../src/components/ods-icon/ods-icon.scss | 168 +++++++++++++++++- .../icon/src/components/ods-icon/ods-icon.tsx | 12 +- .../icon/src/constants/icon-name.ts | 151 +++++++++++++++- .../ods/src/components/icon/src/index.html | 10 +- .../icon/tests/rendering/ods-icon.e2e.ts | 2 +- .../tests/_app/src/components/ods-icon.vue | 2 +- .../stories/components/icon/icon.stories.ts | 25 ++- .../components/icon/migration.from.17.x.mdx | 8 +- .../assets/fonts/ods-icon/icomoon/icomoon.eot | Bin 0 -> 37580 bytes .../assets/fonts/ods-icon/icomoon/icomoon.svg | 160 +++++++++++++++++ .../assets/fonts/ods-icon/icomoon/icomoon.ttf | Bin 0 -> 37416 bytes .../fonts/ods-icon/icomoon/icomoon.woff | Bin 0 -> 37492 bytes .../fonts/ods-icon/icomoon/selection.json | 1 + .../themes/assets/fonts/ods-icon/index.scss | 51 ++++++ packages/themes/package.json | 2 +- packages/themes/src/default/index.scss | 1 + 19 files changed, 559 insertions(+), 47 deletions(-) delete mode 100644 packages/ods/src/components/icon/TODO.md delete mode 100644 packages/ods/src/components/icon/src/assets/icons.data.json create mode 100644 packages/themes/assets/fonts/ods-icon/icomoon/icomoon.eot create mode 100644 packages/themes/assets/fonts/ods-icon/icomoon/icomoon.svg create mode 100644 packages/themes/assets/fonts/ods-icon/icomoon/icomoon.ttf create mode 100644 packages/themes/assets/fonts/ods-icon/icomoon/icomoon.woff create mode 100644 packages/themes/assets/fonts/ods-icon/icomoon/selection.json create mode 100644 packages/themes/assets/fonts/ods-icon/index.scss diff --git a/packages/ods/react/tests/_app/src/components/ods-icon.tsx b/packages/ods/react/tests/_app/src/components/ods-icon.tsx index df06def8d8..d5822d913d 100644 --- a/packages/ods/react/tests/_app/src/components/ods-icon.tsx +++ b/packages/ods/react/tests/_app/src/components/ods-icon.tsx @@ -4,7 +4,7 @@ import { OdsIcon } from 'ods-components-react'; const Icon = () => { return ( - + ); }; diff --git a/packages/ods/src/components/icon/TODO.md b/packages/ods/src/components/icon/TODO.md deleted file mode 100644 index 345c876d9f..0000000000 --- a/packages/ods/src/components/icon/TODO.md +++ /dev/null @@ -1,7 +0,0 @@ -# List of things to be done before releasing this component - -- update `documentation/migration.from.17.x.md` with missing info from design (search fro TODO in the file) -- update icon name list when available -- move implementation to fonts when file server get available -- lastly, when all is done, remove this file -- \ No newline at end of file diff --git a/packages/ods/src/components/icon/src/assets/icons.data.json b/packages/ods/src/components/icon/src/assets/icons.data.json deleted file mode 100644 index b6674ffb6c..0000000000 --- a/packages/ods/src/components/icon/src/assets/icons.data.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "arrow-left": "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='%23000000' fill-rule='evenodd' d='M22.207 12.207a1 1 0 01-1 1H5.621L9.914 17.5A1 1 0 018.5 18.914l-6.707-6.707.7-.7.015-.015L8.5 5.5a1 1 0 011.414 1.414l-4.29 4.292 15.583.001a1 1 0 011 1z'/%3E%3C/svg%3E", - "warning": "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='%23000000' fill-rule='evenodd' d='M13.014 3.248a2 2 0 01.71.71l8.251 14.028A2 2 0 0120.252 21H3.748a2 2 0 01-1.723-3.014l8.251-14.028a2 2 0 012.738-.71zM12 4.972L3.748 19h16.504L12 4.972zm.068 12.025h.017a1.006 1.006 0 01-.052.002L12 17l.068-.003zM12 17a1.018 1.018 0 01-.367-.07l-.056-.024a1.016 1.016 0 01-.198-.122l-.088-.079-.05-.056.048.055-.05-.055-.026-.032-.022-.029a1.045 1.045 0 01-.154-.318.959.959 0 01-.025-.116l-.008-.069L11 16a1.018 1.018 0 01.037-.27l.012-.04a.96.96 0 01.067-.158l.034-.059a1.05 1.05 0 01.063-.09l.078-.088.064-.059.011-.01.001-.001.001-.001.05-.038a1.042 1.042 0 01.32-.151.933.933 0 01.112-.024l.067-.008L12 15h.02a1.006 1.006 0 01.183.02l.058.014a1.069 1.069 0 01.106.035l.056.025a1.016 1.016 0 01.194.119l.09.08a1.008 1.008 0 01.219.329l.025.07a1.11 1.11 0 01.037.154l.008.068.002.069v-.043l.001.028v.066l-.003.051a.985.985 0 01-.033.185l-.012.04a.96.96 0 01-.164.307l-.08.09a1.008 1.008 0 01-.447.259l-.056.013a1.099 1.099 0 01-.056.01l-.066.007h-.002l-.005.001h-.007l.011-.001L12 17zm-.634-1.774l-.01.01-.063.057.06-.056.013-.011zm.553-.224l-.002.001-.006.001.008-.002zM12 15l-.069.002h.015L11.98 15H12zm0-6a1 1 0 011 1v3a1 1 0 01-2 0v-3a1 1 0 011-1zm-.622 6.217l-.01.007v.001l.01-.008z'/%3E%3C/svg%3E" -} diff --git a/packages/ods/src/components/icon/src/components/ods-icon/ods-icon.scss b/packages/ods/src/components/icon/src/components/ods-icon/ods-icon.scss index a2689c4a86..5599a4f728 100644 --- a/packages/ods/src/components/icon/src/components/ods-icon/ods-icon.scss +++ b/packages/ods/src/components/icon/src/components/ods-icon/ods-icon.scss @@ -1,9 +1,163 @@ -// TODO replace all this with dedicated icon font when file server get available :host(.ods-icon) { - display: inline-block; - mask: center/contain no-repeat; - mask-image: var(--ods-icon-mask-image, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'/%3E")); - background-color: var(--ods-color-primary-500); - width: 1rem; - height: 1rem; + /* use !important to prevent issues with browser extensions that change fonts */ + text-transform: none; + line-height: 1; + font-family: 'ODS Icon', serif !important; + speak: never; + font-weight: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-variant: normal; + font-style: normal; } + +:host(.ods-icon__add)::before { content: '\e900'; } +:host(.ods-icon__apps)::before { content: '\e901'; } +:host(.ods-icon__arrow-crossed)::before { content: '\e902'; } +:host(.ods-icon__arrow-down-left)::before { content: '\e903'; } +:host(.ods-icon__arrow-down-right)::before { content: '\e904'; } +:host(.ods-icon__arrow-down)::before { content: '\e905'; } +:host(.ods-icon__arrow-left-right)::before { content: '\e906'; } +:host(.ods-icon__arrow-left)::before { content: '\e907'; } +:host(.ods-icon__arrow-right)::before { content: '\e908'; } +:host(.ods-icon__arrow-up-down)::before { content: '\e909'; } +:host(.ods-icon__arrow-up-left)::before { content: '\e90a'; } +:host(.ods-icon__arrow-up-right)::before { content: '\e90b'; } +:host(.ods-icon__arrow-up)::before { content: '\e90c'; } +:host(.ods-icon__baremetal-rack)::before { content: '\e90d'; } +:host(.ods-icon__baremetal)::before { content: '\e90e'; } +:host(.ods-icon__bell)::before { content: '\e90f'; } +:host(.ods-icon__book)::before { content: '\e910'; } +:host(.ods-icon__calendar)::before { content: '\e911'; } +:host(.ods-icon__chat)::before { content: '\e912'; } +:host(.ods-icon__check)::before { content: '\e913'; } +:host(.ods-icon__checkbox-indeterminate)::before { content: '\e914'; } +:host(.ods-icon__checkbox)::before { content: '\e915'; } +:host(.ods-icon__chevron-down)::before { content: '\e916'; } +:host(.ods-icon__chevron-left)::before { content: '\e917'; } +:host(.ods-icon__chevron-right)::before { content: '\e918'; } +:host(.ods-icon__chevron-up)::before { content: '\e919'; } +:host(.ods-icon__chrono)::before { content: '\e91a'; } +:host(.ods-icon__circle)::before { content: '\e91b'; } +:host(.ods-icon__cloud-check)::before { content: '\e91c'; } +:host(.ods-icon__cloud-cross)::before { content: '\e91d'; } +:host(.ods-icon__cloud-down)::before { content: '\e91e'; } +:host(.ods-icon__cloud-lock-fill)::before { content: '\e91f'; } +:host(.ods-icon__cloud-up)::before { content: '\e920'; } +:host(.ods-icon__cloud)::before { content: '\e921'; } +:host(.ods-icon__collab)::before { content: '\e922'; } +:host(.ods-icon__component)::before { content: '\e924'; } +:host(.ods-icon__critical-full)::before { content: '\e925'; } +:host(.ods-icon__critical)::before { content: '\e926'; } +:host(.ods-icon__cross)::before { content: '\e927'; } +:host(.ods-icon__d-pad)::before { content: '\e928'; } +:host(.ods-icon__danger-full)::before { content: '\e929'; } +:host(.ods-icon__danger)::before { content: '\e92a'; } +:host(.ods-icon__delivery)::before { content: '\e92b'; } +:host(.ods-icon__diamond)::before { content: '\e92c'; } +:host(.ods-icon__double-chevron-left)::before { content: '\e92d'; } +:host(.ods-icon__double-chevron-right)::before { content: '\e92e'; } +:host(.ods-icon__download)::before { content: '\e92f'; } +:host(.ods-icon__email)::before { content: '\e930'; } +:host(.ods-icon__equal)::before { content: '\e931'; } +:host(.ods-icon__error-circle)::before { content: '\e932'; } +:host(.ods-icon__external-link)::before { content: '\e933'; } +:host(.ods-icon__eye-close)::before { content: '\e934'; } +:host(.ods-icon__eye-open)::before { content: '\e935'; } +:host(.ods-icon__face-activated)::before { content: '\e936'; } +:host(.ods-icon__face-dissatisfied)::before { content: '\e937'; } +:host(.ods-icon__face-dizzy)::before { content: '\e938'; } +:host(.ods-icon__face-neutral)::before { content: '\e939'; } +:host(.ods-icon__face-satisfied)::before { content: '\e93a'; } +:host(.ods-icon__face-wink)::before { content: '\e93b'; } +:host(.ods-icon__file-minus)::before { content: '\e93c'; } +:host(.ods-icon__file-plus)::before { content: '\e93d'; } +:host(.ods-icon__file)::before { content: '\e93e'; } +:host(.ods-icon__files-copy)::before { content: '\e93f'; } +:host(.ods-icon__filter)::before { content: '\e940'; } +:host(.ods-icon__focus)::before { content: '\e941'; } +:host(.ods-icon__folder-minus)::before { content: '\e942'; } +:host(.ods-icon__folder-plus)::before { content: '\e943'; } +:host(.ods-icon__folder)::before { content: '\e944'; } +:host(.ods-icon__game-controler-a)::before { content: '\e945'; } +:host(.ods-icon__game-controler-b)::before { content: '\e946'; } +:host(.ods-icon__gameboy)::before { content: '\e947'; } +:host(.ods-icon__gathering)::before { content: '\e948'; } +:host(.ods-icon__gear)::before { content: '\e949'; } +:host(.ods-icon__globe)::before { content: '\e94a'; } +:host(.ods-icon__grid)::before { content: '\e94b'; } +:host(.ods-icon__help-circle)::before { content: '\e94c'; } +:host(.ods-icon__help)::before { content: '\e94d'; } +:host(.ods-icon__hexagon)::before { content: '\e94e'; } +:host(.ods-icon__hierarchy)::before { content: '\e94f'; } +:host(.ods-icon__home)::before { content: '\e950'; } +:host(.ods-icon__info-circle)::before { content: '\e951'; } +:host(.ods-icon__key)::before { content: '\e952'; } +:host(.ods-icon__labs-between)::before { content: '\e953'; } +:host(.ods-icon__labs-empty)::before { content: '\e954'; } +:host(.ods-icon__labs-full)::before { content: '\e955'; } +:host(.ods-icon__leaf)::before { content: '\e956'; } +:host(.ods-icon__life-buoy)::before { content: '\e957'; } +:host(.ods-icon__lightbulb)::before { content: '\e958'; } +:host(.ods-icon__list)::before { content: '\e959'; } +:host(.ods-icon__location)::before { content: '\e95a'; } +:host(.ods-icon__menu-ellipsis-horizontal)::before { content: '\e95b'; } +:host(.ods-icon__menu-ellipsis-vertical)::before { content: '\e95c'; } +:host(.ods-icon__menu-hamburger)::before { content: '\e95d'; } +:host(.ods-icon__minus)::before { content: '\e95e'; } +:host(.ods-icon__money)::before { content: '\e95f'; } +:host(.ods-icon__network)::before { content: '\e960'; } +:host(.ods-icon__padlock-close)::before { content: '\e961'; } +:host(.ods-icon__padlock-open)::before { content: '\e962'; } +:host(.ods-icon__pen)::before { content: '\e963'; } +:host(.ods-icon__phone)::before { content: '\e964'; } +:host(.ods-icon__printer)::before { content: '\e965'; } +:host(.ods-icon__product-3az)::before { content: '\e966'; } +:host(.ods-icon__promotion)::before { content: '\e967'; } +:host(.ods-icon__purchase)::before { content: '\e968'; } +:host(.ods-icon__radio)::before { content: '\e969'; } +:host(.ods-icon__refresh)::before { content: '\e96a'; } +:host(.ods-icon__resize)::before { content: '\e96b'; } +:host(.ods-icon__screen)::before { content: '\e96c'; } +:host(.ods-icon__search)::before { content: '\e96d'; } +:host(.ods-icon__share)::before { content: '\e96e'; } +:host(.ods-icon__shield-check)::before { content: '\e96f'; } +:host(.ods-icon__shield-cross)::before { content: '\e970'; } +:host(.ods-icon__shield-firewall)::before { content: '\e971'; } +:host(.ods-icon__shield-lock-fill)::before { content: '\e972'; } +:host(.ods-icon__shield-minus)::before { content: '\e973'; } +:host(.ods-icon__shield-off)::before { content: '\e974'; } +:host(.ods-icon__shield-plus)::before { content: '\e975'; } +:host(.ods-icon__shield-warning)::before { content: '\e976'; } +:host(.ods-icon__shield)::before { content: '\e977'; } +:host(.ods-icon__shopping-cart-add)::before { content: '\e978'; } +:host(.ods-icon__shopping-cart-clear)::before { content: '\e979'; } +:host(.ods-icon__shopping-cart-error)::before { content: '\e97a'; } +:host(.ods-icon__shopping-cart-minus)::before { content: '\e97b'; } +:host(.ods-icon__shopping-cart)::before { content: '\e97c'; } +:host(.ods-icon__shrink)::before { content: '\e97d'; } +:host(.ods-icon__shutdown)::before { content: '\e97e'; } +:host(.ods-icon__sort-alpha-down)::before { content: '\e983'; } +:host(.ods-icon__sort-alpha-up)::before { content: '\e984'; } +:host(.ods-icon__sort-num-down)::before { content: '\e985'; } +:host(.ods-icon__sort-num-up)::before { content: '\e986'; } +:host(.ods-icon__square)::before { content: '\e987'; } +:host(.ods-icon__star-filled)::before { content: '\e988'; } +:host(.ods-icon__star)::before { content: '\e989'; } +:host(.ods-icon__status)::before { content: '\e98a'; } +:host(.ods-icon__store)::before { content: '\e98b'; } +:host(.ods-icon__success-circle)::before { content: '\e98c'; } +:host(.ods-icon__time-0am)::before { content: '\e98d'; } +:host(.ods-icon__time-3am)::before { content: '\e98e'; } +:host(.ods-icon__time-4am)::before { content: '\e98f'; } +:host(.ods-icon__time-6am)::before { content: '\e990'; } +:host(.ods-icon__time-9am)::before { content: '\e991'; } +:host(.ods-icon__traffic-cone)::before { content: '\e992'; } +:host(.ods-icon__trash)::before { content: '\e993'; } +:host(.ods-icon__triangle)::before { content: '\e994'; } +:host(.ods-icon__undo)::before { content: '\e995'; } +:host(.ods-icon__upload)::before { content: '\e996'; } +:host(.ods-icon__user-circle)::before { content: '\e997'; } +:host(.ods-icon__user)::before { content: '\e998'; } +:host(.ods-icon__warning-triangle-full)::before { content: '\e999'; } +:host(.ods-icon__warning-triangle)::before { content: '\e99a'; } diff --git a/packages/ods/src/components/icon/src/components/ods-icon/ods-icon.tsx b/packages/ods/src/components/icon/src/components/ods-icon/ods-icon.tsx index cd5eca7896..01a1e421db 100644 --- a/packages/ods/src/components/icon/src/components/ods-icon/ods-icon.tsx +++ b/packages/ods/src/components/icon/src/components/ods-icon/ods-icon.tsx @@ -1,7 +1,6 @@ import type { OdsIconName } from '../../constants/icon-name'; import type { FunctionalComponent } from '@stencil/core'; import { Component, Host, Prop, h } from '@stencil/core'; -import icons from '../../assets/icons.data.json'; // TODO replace with dedicated icon font when file server get available @Component({ shadow: true, @@ -13,16 +12,11 @@ export class OdsIcon { @Prop({ reflect: true }) name!: OdsIconName; render(): FunctionalComponent { - const base64Icon = icons[this.name]; - return ( + class={ `ods-icon ods-icon__${this.name}` } + alt={ this.alt }> + ); } } diff --git a/packages/ods/src/components/icon/src/constants/icon-name.ts b/packages/ods/src/components/icon/src/constants/icon-name.ts index 901d514f29..62f976b5a0 100644 --- a/packages/ods/src/components/icon/src/constants/icon-name.ts +++ b/packages/ods/src/components/icon/src/constants/icon-name.ts @@ -1,7 +1,154 @@ enum ODS_ICON_NAME { - // TODO need actual list from design + add = 'add', + apps = 'apps', + arrowCrossed = 'arrow-crossed', + arrowDownLeft = 'arrow-down-left', + arrowDownRight = 'arrow-down-right', + arrowDown = 'arrow-down', + arrowLeftRight = 'arrow-left-right', arrowLeft = 'arrow-left', - warning = 'warning', + arrowRight = 'arrow-right', + arrowUpDown = 'arrow-up-down', + arrowUpLeft = 'arrow-up-left', + arrowUpRight = 'arrow-up-right', + arrowUp = 'arrow-up', + baremetalRack = 'baremetal-rack', + baremetal = 'baremetal', + bell = 'bell', + book = 'book', + calendar = 'calendar', + chat = 'chat', + check = 'check', + checkboxIndeterminate = 'checkbox-indeterminate', + checkbox = 'checkbox', + chevronDown = 'chevron-down', + chevronLeft = 'chevron-left', + chevronRight = 'chevron-right', + chevronUp = 'chevron-up', + chrono = 'chrono', + circle = 'circle', + cloudCheck = 'cloud-check', + cloudCross = 'cloud-cross', + cloudDown = 'cloud-down', + cloudLockFill = 'cloud-lock-fill', + cloudUp = 'cloud-up', + cloud = 'cloud', + collab = 'collab', + component = 'component', + criticalFull = 'critical-full', + critical = 'critical', + cross = 'cross', + dPad = 'd-pad', + dangerFull = 'danger-full', + danger = 'danger', + delivery = 'delivery', + diamond = 'diamond', + doubleChevronLeft = 'double-chevron-left', + doubleChevronRight = 'double-chevron-right', + download = 'download', + email = 'email', + equal = 'equal', + errorCircle = 'error-circle', + externalLink = 'external-link', + eyeClose = 'eye-close', + eyeOpen = 'eye-open', + faceActivated = 'face-activated', + faceDissatisfied = 'face-dissatisfied', + faceDizzy = 'face-dizzy', + faceNeutral = 'face-neutral', + faceSatisfied = 'face-satisfied', + faceWink = 'face-wink', + fileMinus = 'file-minus', + filePlus = 'file-plus', + file = 'file', + filesCopy = 'files-copy', + filter = 'filter', + focus = 'focus', + folderMinus = 'folder-minus', + folderPlus = 'folder-plus', + folder = 'folder', + gameControlerA = 'game-controler-a', + gameControlerB = 'game-controler-b', + gameboy = 'gameboy', + gathering = 'gathering', + gear = 'gear', + globe = 'globe', + grid = 'grid', + helpCircle = 'help-circle', + help = 'help', + hexagon = 'hexagon', + hierarchy = 'hierarchy', + home = 'home', + infoCircle = 'info-circle', + key = 'key', + labsBetween = 'labs-between', + labsEmpty = 'labs-empty', + labsFull = 'labs-full', + leaf = 'leaf', + lifeBuoy = 'life-buoy', + lightbulb = 'lightbulb', + list = 'list', + location = 'location', + menuEllipsisHorizontal = 'menu-ellipsis-horizontal', + menuEllipsisVertical = 'menu-ellipsis-vertical', + menuHamburger = 'menu-hamburger', + minus = 'minus', + money = 'money', + network = 'network', + padlockClose = 'padlock-close', + padlockOpen = 'padlock-open', + pen = 'pen', + phone = 'phone', + printer = 'printer', + product3az = 'product-3az', + promotion = 'promotion', + purchase = 'purchase', + radio = 'radio', + refresh = 'refresh', + resize = 'resize', + screen = 'screen', + search = 'search', + share = 'share', + shieldCheck = 'shield-check', + shieldCross = 'shield-cross', + shieldFirewall = 'shield-firewall', + shieldLockFill = 'shield-lock-fill', + shieldMinus = 'shield-minus', + shieldOff = 'shield-off', + shieldPlus = 'shield-plus', + shieldWarning = 'shield-warning', + shield = 'shield', + shoppingCartAdd = 'shopping-cart-add', + shoppingCartClear = 'shopping-cart-clear', + shoppingCartError = 'shopping-cart-error', + shoppingCartMinus = 'shopping-cart-minus', + shoppingCart = 'shopping-cart', + shrink = 'shrink', + shutdown = 'shutdown', + sortAlphaDown = 'sort-alpha-down', + sortAlphaUp = 'sort-alpha-up', + sortNumDown = 'sort-num-down', + sortNumUp = 'sort-num-up', + square = 'square', + starFilled = 'star-filled', + star = 'star', + status = 'status', + store = 'store', + successCircle = 'success-circle', + time0am = 'time-0am', + time3am = 'time-3am', + time4am = 'time-4am', + time6am = 'time-6am', + time9am = 'time-9am', + trafficCone = 'traffic-cone', + trash = 'trash', + triangle = 'triangle', + undo = 'undo', + upload = 'upload', + userCircle = 'user-circle', + user = 'user', + warningTriangleFull = 'warning-triangle-full', + warningTriangle = 'warning-triangle', } type OdsIconName =`${ODS_ICON_NAME}`; diff --git a/packages/ods/src/components/icon/src/index.html b/packages/ods/src/components/icon/src/index.html index 5aebc36597..affba82b63 100644 --- a/packages/ods/src/components/icon/src/index.html +++ b/packages/ods/src/components/icon/src/index.html @@ -9,12 +9,10 @@ - @@ -23,8 +21,8 @@

All set

- +
diff --git a/packages/ods/src/components/icon/tests/rendering/ods-icon.e2e.ts b/packages/ods/src/components/icon/tests/rendering/ods-icon.e2e.ts index 13fac18dce..2c30c48c96 100644 --- a/packages/ods/src/components/icon/tests/rendering/ods-icon.e2e.ts +++ b/packages/ods/src/components/icon/tests/rendering/ods-icon.e2e.ts @@ -29,7 +29,7 @@ describe('ods-icon rendering', () => { it('should render with custom style applied', async() => { const customHeight = 200; - await setup(``, `ods-icon { height: ${customHeight}px; }`); + await setup(``, `ods-icon { height: ${customHeight}px; }`); const elStyle = await el.getComputedStyle(); expect(parseInt(elStyle.getPropertyValue('height'), 10)).toBe(customHeight); diff --git a/packages/ods/vue/tests/_app/src/components/ods-icon.vue b/packages/ods/vue/tests/_app/src/components/ods-icon.vue index 84583e853b..4ec1975fe2 100644 --- a/packages/ods/vue/tests/_app/src/components/ods-icon.vue +++ b/packages/ods/vue/tests/_app/src/components/ods-icon.vue @@ -14,7 +14,7 @@ }, data() { return { - iconName: ODS_ICON_NAME.warning, + iconName: ODS_ICON_NAME.add, }; }, }); diff --git a/packages/storybook/stories/components/icon/icon.stories.ts b/packages/storybook/stories/components/icon/icon.stories.ts index 42c96e7d03..a67ea741b7 100644 --- a/packages/storybook/stories/components/icon/icon.stories.ts +++ b/packages/storybook/stories/components/icon/icon.stories.ts @@ -34,12 +34,31 @@ export const Demo: StoryObj = { }, }), args: { - name: ODS_ICON_NAME.warning, + name: ODS_ICON_NAME.add, }, }; export const All: StoryObj = { - args: {}, + render: (args) => { + const regexp = new RegExp(args.search) + const names = args.search ? ODS_ICON_NAMES.filter((name) => { + return regexp.test(name); + }) : ODS_ICON_NAMES; + + return html` +
+ ${names.map((name) => + html`` + )} +
+ `; + }, + argTypes: { + search: { + control: { type: 'text' }, + description: 'Search for a specific icon name' + }, + }, }; export const Overview: StoryObj = { @@ -59,6 +78,6 @@ export const Name: StoryObj = { }, render: () => html` - + `, }; diff --git a/packages/storybook/stories/components/icon/migration.from.17.x.mdx b/packages/storybook/stories/components/icon/migration.from.17.x.mdx index 65d695459e..bb0161f130 100644 --- a/packages/storybook/stories/components/icon/migration.from.17.x.mdx +++ b/packages/storybook/stories/components/icon/migration.from.17.x.mdx @@ -18,7 +18,7 @@ You can use the new `alt` attribute to obtain the same behavior. Has been removed. -Icons are now font, they will by default have the same color as the current text. (TODO will be true after font update only) +Icons are now font, they will by default have the same color as the current text. You can override this using a css class on the component directly. @@ -26,7 +26,7 @@ You can override this using a css class on the component directly. Has been removed. -Icons are now font, they will by default have the same color as the current text. (TODO will be true after font update only) +Icons are now font, they will by default have the same color as the current text. `hoverable` @@ -34,13 +34,11 @@ Has been removed. Interactive icon will be handled specifically by components that implements those interactions. -TODO? add example of scss mixin to reproduce current style? - `size` Has been removed. -Icons are now font, they will by default have the same size as the current text. (TODO will be true after font update only) +Icons are now font, they will by default have the same size as the current text. You can override this using a css class on the component directly. diff --git a/packages/themes/assets/fonts/ods-icon/icomoon/icomoon.eot b/packages/themes/assets/fonts/ods-icon/icomoon/icomoon.eot new file mode 100644 index 0000000000000000000000000000000000000000..3451176cd81070ac195eb3bdec0e4e33660d9b09 GIT binary patch literal 37580 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 + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/themes/assets/fonts/ods-icon/icomoon/icomoon.ttf b/packages/themes/assets/fonts/ods-icon/icomoon/icomoon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..15d37d2430c22ada66fbeb267e8ff63557ec2cbb GIT binary patch literal 37416 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 lnlrpdr*M87_DCpThub&d`v4!nVKD&ok