@fluixi-ui/skin-material 0.2.1-alpha.1 → 0.3.0-alpha.11

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/README.md CHANGED
@@ -10,7 +10,7 @@ Import the stylesheet after the tokens + preset, then activate with
10
10
  `data-ui="material"` on a root (or any subtree):
11
11
 
12
12
  ```ts
13
- import '@fluixi-ui/tokens/preset.css';
13
+ import '@fluixi-ui/styles/all.css';
14
14
  import '@fluixi-ui/skin-material/styles.css';
15
15
 
16
16
  document.documentElement.dataset.ui = 'material';
@@ -1 +1 @@
1
- {"fileNames":["../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.d.ts","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/modules/index.d.ts","../src/ripple.ts"],"fileIdsList":[[60],[61]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b8f34dd1757f68e03262b1ca3ddfa668a855b872f8bdd5224d6f993a7b37dc2c","impliedFormat":99},{"version":"0d9eba127f45527253640d90a7d4a726b704f73691a93b973d0d33f48dda7ae6","signature":"7c757d2e0b0b1a3d2ddb39a712eb3977f7254339a09517a89855feb72a69c854","impliedFormat":99}],"root":[62],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":false,"importHelpers":true,"module":199,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.lib.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[61,1],[62,2]],"latestChangedDtsFile":"./ripple.d.ts","version":"5.8.3"}
1
+ {"version":"7.0.2","root":[62],"packageJsons":["../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/modules/package.json","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/package.json","../package.json"],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2021.d.ts","lib.es2022.d.ts","lib.dom.d.ts","lib.dom.iterable.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.es2021.promise.d.ts","lib.es2021.string.d.ts","lib.es2021.weakref.d.ts","lib.es2021.intl.d.ts","lib.es2022.array.d.ts","lib.es2022.error.d.ts","lib.es2022.intl.d.ts","lib.es2022.object.d.ts","lib.es2022.string.d.ts","lib.es2022.regexp.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.d.ts","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/modules/index.d.ts","../src/ripple.ts"],"fileInfos":[{"version":"16934abaab7026ac114da441aabea1a0","affectsGlobalScope":true,"impliedNodeFormat":1},"d4306fb2e47f74835e8674ffac07d76f","e437c5c1302869326c3bb93da85bbbcf","e4324975a566567b21d350615f1fc6ac","333b1b9a2a9ac3b8497dba5c63b5ba50","6cffacd662b6eb5fa7a36aa2ea366bfa","b4c34f9c23304dbef2d23698637ed638","e5cb86a5fc491796ecd1d2dd348d208f","feb6c6fb19cdb246a5d8acb36a6901c7",{"version":"aae8996e8b5684814785a42cbbefcd79","affectsGlobalScope":true,"impliedNodeFormat":1},"abad6dd56cc8caf095c165df8124d237",{"version":"926204c28cd3d073865348473ae28d2e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f25e42c801b2cb3cf2b39792006a9beb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1708ea4d34dc37fadadc63ca01127e80","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2b056277dd138e8f5650fc04e20eaa8d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1da2c1f258970fd3cc91184f69e91a9d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4ef72aa378127e7b7abba915b0110b1e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3ec74c6a7d4463f0254db3a74cf75646","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"84c2bdfa470d075526cce6322d81b0b6","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0b3844c2b8c73e4e1ab91431411cad11","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4fc71cf4a15b8d99675a31df77f26e07","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d1b49564ddaeca3df5b6dbae925d2242","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6a25be566d60ccfc2d6e8b7bfdeefa83","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8a20e27646985dfd58c57ca6566553dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9969f02ad3cdcbf4f709405cda44167f","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c9be4792a7a4f42c15ae7360bf28779","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":1},"68565f078f6cbaa18bac7ac1aee706a4",{"version":"6df9988546b1b8e15cb137c4ed46c629","impliedNodeFormat":99},{"version":"f345248cecf5c3fd86cfdae2c36e22ec","signature":"afb3872baff7c967f924f4320cf948bc","impliedNodeFormat":99}],"fileIdsList":[[60]],"options":{"composite":true,"emitDeclarationOnly":false,"declaration":true,"declarationMap":true,"importHelpers":true,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noEmitOnError":true,"noUnusedLocals":true,"noImplicitOverride":true,"noUncheckedSideEffectImports":false,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.lib.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[61,1]],"latestChangedDtsFile":"./ripple.d.ts"}
package/material.css CHANGED
@@ -10,7 +10,7 @@
10
10
  * geometry, filled text fields, emphasized motion, Roboto. (True click-origin
11
11
  * ripple needs JS; the state layer stands in for it here.)
12
12
  */
13
- @layer flx.tokens, flx.components, flx.skin;
13
+ @layer flx.reset, flx.base, flx.tokens, flx.components, flx.skin, flx.fx;
14
14
 
15
15
  /* Self-hosted Roboto (variable, latin subset) — no CDN / privacy dependency. */
16
16
  @font-face {
@@ -40,7 +40,7 @@
40
40
  }
41
41
 
42
42
  /* ---- Button: pill shape, state layer, filled/tonal/outlined/text ---------- */
43
- [data-ui='material'] :where([data-variant]) {
43
+ [data-ui='material'] :where([data-variant]:not([data-badge])) {
44
44
  position: relative;
45
45
  overflow: hidden;
46
46
  border-radius: 9999px;
@@ -56,44 +56,41 @@
56
56
  /* The Material "state layer": a currentColor overlay that fades in on interaction.
57
57
  On a filled button currentColor is the on-primary ink (white) → a subtle
58
58
  lightening; on outlined/text/tonal it's the primary colour. */
59
- [data-ui='material'] :where([data-variant])::before {
59
+ [data-ui='material'] :where([data-variant]:not([data-badge]))::before {
60
60
  content: '';
61
61
  position: absolute;
62
62
  inset: 0;
63
+ /* Follow the button's own shape so the hover layer is rounded even where the
64
+ button isn't clipping (e.g. a glow button, which overflows). */
65
+ border-radius: inherit;
63
66
  background: currentColor;
64
67
  opacity: 0;
65
68
  pointer-events: none;
66
69
  transition: opacity var(--flx-ui-duration-fast) var(--flx-ui-ease-standard);
67
70
  }
68
- [data-ui='material'] :where([data-variant]:hover)::before { opacity: 0.08; }
69
- [data-ui='material'] :where([data-variant]:focus-visible)::before { opacity: 0.12; }
70
- [data-ui='material'] :where([data-variant]:active)::before { opacity: 0.16; }
71
- [data-ui='material'] :where([data-variant]:focus-visible) { box-shadow: none; outline: none; }
72
- [data-ui='material'] :where([data-variant][disabled], [data-variant]:disabled) {
71
+ [data-ui='material'] :where([data-variant]:not([data-badge]):hover)::before { opacity: 0.08; }
72
+ [data-ui='material'] :where([data-variant]:not([data-badge]):focus-visible)::before { opacity: 0.12; }
73
+ [data-ui='material'] :where([data-variant]:not([data-badge]):active)::before { opacity: 0.16; }
74
+ [data-ui='material'] :where([data-variant]:not([data-badge]):focus-visible) { box-shadow: none; outline: none; }
75
+ [data-ui='material'] :where([data-variant]:not([data-badge])[disabled], [data-variant]:not([data-badge]):disabled) {
73
76
  box-shadow: none;
74
77
  opacity: 0.38;
75
78
  }
76
79
 
77
80
  /* Filled (solid) = the classic contained button: rests on elevation, lifts
78
81
  further on hover. Elevation is per-variant — outlined/text/tonal stay flat. */
79
- [data-ui='material'] :where([data-variant='solid']) { box-shadow: var(--flx-ui-shadow-sm); }
80
- [data-ui='material'] :where([data-variant='solid']:hover) { box-shadow: var(--flx-ui-shadow-md); }
81
- [data-ui='material'] :where([data-variant='solid']:active) { box-shadow: var(--flx-ui-shadow-sm); }
82
+ [data-ui='material'] :where([data-variant='solid']:not([data-badge])) { box-shadow: var(--flx-ui-shadow-sm); }
83
+ [data-ui='material'] :where([data-variant='solid']:not([data-badge]):hover) { box-shadow: var(--flx-ui-shadow-md); }
84
+ [data-ui='material'] :where([data-variant='solid']:not([data-badge]):active) { box-shadow: var(--flx-ui-shadow-sm); }
82
85
  /* Tonal (soft): secondary-container feel. */
83
- [data-ui='material'] :where([data-variant='soft']) { background: var(--flx-ui-color-primary-subtle); color: var(--flx-ui-color-primary-active); }
86
+ [data-ui='material'] :where([data-variant='soft']:not([data-badge])) { background: var(--flx-ui-color-primary-subtle); color: var(--flx-ui-color-primary-active); }
84
87
  /* Outlined: 1px hairline, no fill. */
85
- [data-ui='material'] :where([data-variant='outline']) { border: 1px solid var(--flx-ui-color-border-strong); }
88
+ [data-ui='material'] :where([data-variant='outline']:not([data-badge])) { border: 1px solid var(--flx-ui-color-border-strong); }
89
+ [data-ui='material'] :where([data-variant='outline']:not([data-badge]):hover:not([data-disabled])) { border-color: var(--flx-ui-color-primary-hover); }
86
90
  /* Text: tighter padding, no border. */
87
- [data-ui='material'] :where([data-variant='ghost']) { padding: 0 12px; }
88
-
89
- /* Badges also carry [data-variant] — undo the button treatment (they're chips,
90
- not buttons): restore size, keep the pill, drop the state layer. */
91
- [data-ui='material'] :where(.flx-ui-badge[data-variant]) {
92
- height: auto;
93
- padding: 2px 10px;
94
- box-shadow: none;
95
- }
96
- [data-ui='material'] :where(.flx-ui-badge[data-variant])::before { content: none; }
91
+ [data-ui='material'] :where([data-variant='ghost']:not([data-badge])) { padding: 0 12px; }
92
+ /* Badges carry [data-variant] too, but every button rule above excludes
93
+ [data-badge], so a badge is never treated as a button — no guard needed. */
97
94
 
98
95
  /* ---- Switch: M3 geometry (52×32 track, growing thumb) --------------------- */
99
96
  [data-ui='material'] :where([role='switch']) {
@@ -129,9 +126,26 @@
129
126
  border-width: 2px;
130
127
  border-radius: 2px;
131
128
  }
129
+ /* The check (rotated border) and indeterminate bar are flex items; the tighter
130
+ 2px-border box lets flex shrink them to a sliver on the main axis. Pin them. */
131
+ [data-ui='material'] :where([role='checkbox'][data-state='checked'])::after,
132
+ [data-ui='material'] :where([role='checkbox'][data-state='indeterminate'])::after {
133
+ flex: none;
134
+ }
135
+ [data-ui='material'] :where([role='checkbox'][data-state='checked'])::after {
136
+ width: 4px;
137
+ height: 8px;
138
+ margin-top: -3px;
139
+ }
140
+ /* Multi-select listbox/select indicator box → match the material checkbox. */
141
+ [data-ui='material'] :where([data-select-item-indicator]) {
142
+ box-sizing: border-box;
143
+ border-width: 2px;
144
+ border-radius: 2px;
145
+ }
132
146
 
133
147
  /* ---- Slider: M3 filled thumb -------------------------------------------- */
134
- [data-ui='material'] :where([role='slider']) {
148
+ [data-ui='material'] :where([data-slider] [role='slider']) {
135
149
  width: 20px;
136
150
  height: 20px;
137
151
  background: var(--flx-ui-color-primary);
@@ -146,18 +160,48 @@
146
160
  border-top-right-radius: 3px;
147
161
  }
148
162
 
149
- /* ---- Filled text field + combobox control -------------------------------- */
150
- [data-ui='material'] :where([data-input], [data-combobox-control]) {
163
+ /* ---- Text field / select / combobox appearance --------------------------
164
+ Baseline (no data-field-variant) and the explicit `filled` variant → M3
165
+ filled underline; `outlined` → M3 outlined box. 4px M3 radius (the tokens'
166
+ radius-md is 12px here). */
167
+ [data-ui='material'] :where(
168
+ [data-input]:not([data-field-variant]),
169
+ [data-combobox-control]:not([data-field-variant]),
170
+ button[role='combobox']:not([data-field-variant]),
171
+ [data-field-variant='filled']) {
151
172
  background: var(--flx-ui-color-bg-muted);
152
- border: none;
173
+ border: 1px solid transparent;
153
174
  border-bottom: 1px solid var(--flx-ui-color-border-strong);
154
175
  border-radius: 4px 4px 0 0;
155
176
  }
156
- [data-ui='material'] :where([data-input]:focus, [data-input]:focus-visible, [data-combobox-control]:focus-within) {
177
+ [data-ui='material'] :where(
178
+ [data-input]:not([data-field-variant]):focus,
179
+ [data-combobox-control]:not([data-field-variant]):focus-within,
180
+ button[role='combobox']:not([data-field-variant]):focus-visible,
181
+ button[role='combobox']:not([data-field-variant])[data-state='open'],
182
+ [data-field-variant='filled']:focus,
183
+ [data-field-variant='filled']:focus-visible,
184
+ [data-field-variant='filled']:focus-within) {
157
185
  border-bottom: 2px solid var(--flx-ui-color-primary);
158
186
  box-shadow: none;
159
187
  outline: none;
160
188
  }
189
+ /* Outlined → M3 outlined box (4px), 2px primary border on focus. */
190
+ [data-ui='material'] :where([data-field-variant='outlined']) {
191
+ background: transparent;
192
+ border: 1px solid var(--flx-ui-color-border-strong);
193
+ border-radius: 4px;
194
+ }
195
+ [data-ui='material'] :where([data-field-variant='outlined']:focus, [data-field-variant='outlined']:focus-visible, [data-field-variant='outlined']:focus-within) {
196
+ border: 2px solid var(--flx-ui-color-primary);
197
+ box-shadow: none;
198
+ outline: none;
199
+ }
200
+ /* The combobox's inner input must stay bare — the wrapper carries the field. */
201
+ [data-ui='material'] :where([data-combobox-control] [role='combobox']) {
202
+ background: transparent;
203
+ border: none;
204
+ }
161
205
 
162
206
  /* ---- Menus & lists: full-bleed M3 rows, roomier padding ------------------- */
163
207
  [data-ui='material'] :where([role='menuitem'], [role='option']) {
@@ -212,15 +256,299 @@
212
256
  opacity: 0.4;
213
257
  }
214
258
 
259
+ /* ---- Surface & Card: M3 elevation (softer than the raw shadow tokens, which
260
+ are tuned for pop-overs; on a plain container they read too heavy) ------- */
261
+ [data-ui='material'] :where([data-surface]) {
262
+ border-radius: 12px;
263
+ }
264
+ [data-ui='material'] :where([data-surface][data-elevation='0']) {
265
+ box-shadow: none;
266
+ }
267
+ [data-ui='material'] :where([data-surface][data-elevation='1']),
268
+ [data-ui='material'] :where([data-card]) {
269
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.14), 0 1px 3px rgba(0, 0, 0, 0.08);
270
+ }
271
+ [data-ui='material'] :where([data-surface][data-elevation='2']) {
272
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.13), 0 2px 6px rgba(0, 0, 0, 0.1);
273
+ }
274
+ [data-ui='material'] :where([data-surface][data-elevation='3']) {
275
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.1);
276
+ }
277
+ [data-ui='material'] :where([data-surface][data-elevation='4']) {
278
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.14), 0 6px 12px rgba(0, 0, 0, 0.1);
279
+ }
280
+ [data-ui='material'] :where([data-card]) {
281
+ border-radius: 12px;
282
+ }
283
+
284
+ /* ---- Calendar: M3 date grid — circular days, outlined "today", state-layer
285
+ nav, and a tonal band across a selected range. ------------------------- */
286
+ [data-ui='material'] :where([data-calendar-day]) {
287
+ border-radius: 9999px;
288
+ font-weight: 500;
289
+ }
290
+ [data-ui='material'] :where([data-calendar-day]:hover:not([data-disabled]):not([data-selected])) {
291
+ background: color-mix(in oklab, var(--flx-ui-color-primary) 10%, transparent);
292
+ color: inherit;
293
+ }
294
+ [data-ui='material'] :where([data-calendar-day][data-today]:not([data-selected])) {
295
+ border: 1px solid var(--flx-ui-color-primary);
296
+ color: var(--flx-ui-color-primary);
297
+ }
298
+ [data-ui='material'] :where([data-calendar-nav]) {
299
+ border: none;
300
+ border-radius: 9999px;
301
+ }
302
+ [data-ui='material'] :where([data-calendar-nav]:hover:not([disabled])) {
303
+ background: color-mix(in oklab, currentColor 8%, transparent);
304
+ }
305
+ /* Range: circular ends, a flat secondary-container band through the middle. */
306
+ [data-ui='material'] :where([data-range] [data-calendar-day][data-selected]) {
307
+ border-radius: 0;
308
+ background: var(--flx-ui-color-primary-subtle);
309
+ color: var(--flx-ui-color-primary-active);
310
+ }
311
+ [data-ui='material'] :where([data-range] [data-calendar-day][data-selection-start]) {
312
+ border-radius: 9999px 0 0 9999px;
313
+ }
314
+ [data-ui='material'] :where([data-range] [data-calendar-day][data-selection-end]) {
315
+ border-radius: 0 9999px 9999px 0;
316
+ }
317
+ [data-ui='material'] :where([data-range] [data-calendar-day][data-selection-start][data-selection-end]) {
318
+ border-radius: 9999px;
319
+ }
320
+ [data-ui='material'] :where([data-calendar-day][data-selection-start], [data-calendar-day][data-selection-end]) {
321
+ background: var(--flx-ui-color-primary);
322
+ color: var(--flx-ui-color-primary-fg);
323
+ }
324
+
325
+ /* ---- Date field & date picker: filled segmented control + M3 date-picker
326
+ surface, matching the filled text-field language above. ---------------- */
327
+ /* The field frame carries the filled fill + underline; the segment input nested
328
+ inside the picker control stays transparent so the underline isn't doubled. */
329
+ [data-ui='material'] :where([data-date-field-input], [data-date-picker-control]) {
330
+ background: var(--flx-ui-color-bg-muted);
331
+ border: none;
332
+ border-bottom: 1px solid var(--flx-ui-color-border-strong);
333
+ border-radius: 4px 4px 0 0;
334
+ }
335
+ [data-ui='material'] :where([data-date-field-input]:focus-within, [data-date-picker-control]:focus-within) {
336
+ border-bottom: 2px solid var(--flx-ui-color-primary);
337
+ box-shadow: none;
338
+ outline: none;
339
+ }
340
+ [data-ui='material'] :where([data-date-picker-input]) {
341
+ background: transparent;
342
+ border: none;
343
+ }
344
+ [data-ui='material'] :where([data-date-picker-content]) {
345
+ border-radius: 16px;
346
+ box-shadow: 0 4px 8px 3px rgba(0, 0, 0, 0.12), 0 1px 3px rgba(0, 0, 0, 0.2);
347
+ }
348
+
349
+ /* ---- Accordion: flat M3 list — no outer frame, dividers between items, a
350
+ state-layer on the header rather than a filled hover. ------------------ */
351
+ [data-ui='material'] :where([data-accordion]) {
352
+ border: none;
353
+ border-radius: 0;
354
+ }
355
+ [data-ui='material'] :where([data-accordion-item]:not(:last-child)) {
356
+ border-bottom: 1px solid var(--flx-ui-color-border);
357
+ }
358
+ [data-ui='material'] :where([data-accordion-trigger]) {
359
+ padding: 16px var(--flx-ui-space-4);
360
+ font-weight: 500;
361
+ }
362
+ [data-ui='material'] :where([data-accordion-trigger]:hover:not([data-disabled])) {
363
+ background: color-mix(in oklab, var(--flx-ui-color-fg) 6%, transparent);
364
+ }
365
+
366
+ /* ---- Radio: M3 20px target ---------------------------------------------- */
367
+ [data-ui='material'] :where([role='radio']) {
368
+ width: 20px;
369
+ height: 20px;
370
+ border-width: 2px;
371
+ }
372
+
373
+ /* ---- Toggle / segmented button: selected = secondary-container ----------- */
374
+ [data-ui='material'] :where([aria-pressed][data-state='on']) {
375
+ background: var(--flx-ui-color-primary-subtle);
376
+ border-color: transparent;
377
+ color: var(--flx-ui-color-primary-active);
378
+ }
379
+
380
+ /* ---- Number field: filled control row to match the text fields ---------- */
381
+ [data-ui='material'] :where([data-number-field-input-row]) {
382
+ background: var(--flx-ui-color-bg-muted);
383
+ border: none;
384
+ border-bottom: 1px solid var(--flx-ui-color-border-strong);
385
+ border-radius: 4px 4px 0 0;
386
+ }
387
+ [data-ui='material'] :where([data-number-field-input-row]:focus-within) {
388
+ border-bottom: 2px solid var(--flx-ui-color-primary);
389
+ }
390
+
391
+ /* ---- Linear progress: 4dp fully-rounded track, tonal remainder ---------- */
392
+ [data-ui='material'] :where([role='progressbar']:not([data-circular])) {
393
+ height: 4px;
394
+ border-radius: 9999px;
395
+ background: var(--flx-ui-color-primary-subtle);
396
+ }
397
+
398
+ /* ---- Sidenav: M3 navigation drawer — full-pill items, state-layer hover,
399
+ secondary-container active, elevated menu flyout. --------------------- */
400
+ [data-ui='material'] :where([data-sidenav-link], [data-sidenav-sub-trigger]) {
401
+ border-radius: 9999px;
402
+ font-weight: 500;
403
+ }
404
+ [data-ui='material'] :where([data-sidenav-link]:hover:not([data-active]),
405
+ [data-sidenav-sub-trigger]:hover:not([data-active])) {
406
+ background: color-mix(in oklab, var(--flx-ui-color-fg) 8%, transparent);
407
+ color: inherit;
408
+ }
409
+ [data-ui='material'] :where([data-sidenav-link][data-active],
410
+ [data-sidenav-sub-trigger][data-active]) {
411
+ background: var(--flx-ui-color-primary-subtle);
412
+ color: var(--flx-ui-color-primary-active);
413
+ font-weight: 600;
414
+ }
415
+ [data-ui='material'] :where([data-sidenav-trigger]) {
416
+ border-radius: 9999px;
417
+ }
418
+ /* Flyout: an elevated M3 menu surface; its rows keep the pill treatment. */
419
+ [data-ui='material'] :where([data-sidenav-sub-content][data-flyout]) {
420
+ border-radius: 12px;
421
+ box-shadow: var(--flx-ui-shadow-lg);
422
+ padding: var(--flx-ui-space-2);
423
+ }
424
+ [data-ui='material'] :where([data-sidenav][data-mobile]) {
425
+ border-radius: 0 16px 16px 0;
426
+ }
427
+ [data-ui='material'] :where([data-sidenav][data-mobile][data-side='right']) {
428
+ border-radius: 16px 0 0 16px;
429
+ }
430
+
431
+ /* ---- Pagination: circular pages, filled current ------------------------- */
432
+ [data-ui='material'] :where([data-pagination-page], [data-pagination-prev], [data-pagination-next]) {
433
+ border-radius: 9999px;
434
+ }
435
+ [data-ui='material'] :where([data-pagination-page]:hover:not([data-current])) {
436
+ background: color-mix(in oklab, var(--flx-ui-color-fg) 8%, transparent);
437
+ }
438
+ [data-ui='material'] :where([data-pagination-page][data-current]) {
439
+ background: var(--flx-ui-color-primary);
440
+ color: var(--flx-ui-color-primary-fg);
441
+ border-color: transparent;
442
+ }
443
+
444
+ /* ---- Stepper: circular numbered indicators ------------------------------ */
445
+ [data-ui='material'] :where([data-stepper-indicator]) {
446
+ border-radius: 9999px;
447
+ }
448
+
449
+ /* ---- Breadcrumb: state-layer link affordance ---------------------------- */
450
+ /* Padded pill targets so the state-layer has room to breathe (M3). */
451
+ [data-ui='material'] :where([data-breadcrumb-link]) {
452
+ padding: 2px 8px;
453
+ margin: 0 -2px;
454
+ border-radius: 999px;
455
+ }
456
+ [data-ui='material'] :where([data-breadcrumb-link]:hover) {
457
+ background: color-mix(in oklab, var(--flx-ui-color-fg) 8%, transparent);
458
+ color: var(--flx-ui-color-fg);
459
+ }
460
+ [data-ui='material'] :where([data-breadcrumb-page]) {
461
+ padding: 2px 8px;
462
+ }
463
+
464
+ /* ---- Toolbar: M3 surface + pill state-layer buttons ---------------------- */
465
+ [data-ui='material'] :where([role='toolbar']) {
466
+ border-radius: 8px;
467
+ gap: 2px;
468
+ }
469
+ [data-ui='material'] :where([role='toolbar'] > button:not([aria-pressed])) {
470
+ border-radius: 999px;
471
+ }
472
+ [data-ui='material'] :where([role='toolbar'] > button:not([aria-pressed]):hover) {
473
+ background: color-mix(in oklab, var(--flx-ui-color-fg) 8%, transparent);
474
+ color: var(--flx-ui-color-fg);
475
+ }
476
+
477
+ /* ---- Navigation menu & menubar: state-layer triggers, rounded ----------- */
478
+ [data-ui='material'] :where([data-navigation-menu-trigger]:hover),
479
+ [data-ui='material'] :where([role='menubar'] > [role='menuitem']:hover) {
480
+ background: color-mix(in oklab, var(--flx-ui-color-fg) 8%, transparent);
481
+ border-radius: 8px;
482
+ }
483
+
484
+ /* ---- Command & menu rows: M3 state layer over the flat rows -------------- */
485
+ [data-ui='material'] :where([data-command-item][data-active]) {
486
+ background: color-mix(in oklab, var(--flx-ui-color-fg) 8%, transparent);
487
+ }
488
+
489
+ /* ---- Table: flat M3 data table — no frame, divider-only rows, sentence-case
490
+ header (no all-caps), state-layer hover/selection, comfortable density -- */
491
+ [data-ui='material'] :where([data-table]) {
492
+ border: none;
493
+ border-radius: 0;
494
+ }
495
+ [data-ui='material'] :where([data-table-head]) {
496
+ background: transparent;
497
+ color: var(--flx-ui-color-fg-muted);
498
+ font-size: var(--flx-ui-font-size-sm);
499
+ font-weight: 500;
500
+ letter-spacing: normal;
501
+ text-transform: none;
502
+ padding: var(--flx-ui-space-3);
503
+ border-bottom: var(--flx-ui-border-width-thin) solid var(--flx-ui-color-border);
504
+ }
505
+ [data-ui='material'] :where([data-table-cell]) {
506
+ padding: var(--flx-ui-space-3);
507
+ }
508
+ [data-ui='material'] :where([data-table-body] > [data-table-row]:hover) {
509
+ background: color-mix(in oklab, var(--flx-ui-color-fg) 5%, transparent);
510
+ }
511
+ [data-ui='material'] :where([data-table-row][data-selected]),
512
+ [data-ui='material'] :where([data-table-row][data-selected]:hover) {
513
+ background: color-mix(in oklab, var(--flx-ui-color-primary) 10%, transparent);
514
+ }
515
+ /* Header is transparent now, so pinned cells need an opaque surface fill. */
516
+ [data-ui='material'] :where([data-table-cell][data-pinned]),
517
+ [data-ui='material'] :where([data-table-head][data-pinned]) {
518
+ background: var(--flx-ui-color-bg);
519
+ }
520
+ /* Compact density under Material. */
521
+ [data-ui='material'] :where([data-table][data-density='compact'] [data-table-head]),
522
+ [data-ui='material'] :where([data-table][data-density='compact'] [data-table-cell]) {
523
+ padding: var(--flx-ui-space-1) var(--flx-ui-space-2);
524
+ }
525
+
526
+ /* ---- Toast: M3 snackbar shape + elevation (keeps the type accent) -------- */
527
+ [data-ui='material'] :where([data-toast]) {
528
+ border-radius: 4px;
529
+ box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2), 0 1px 18px rgba(0, 0, 0, 0.12);
530
+ }
531
+
532
+ /* ---- Alert: M3 medium radius ------------------------------------------- */
533
+ [data-ui='material'] :where([data-alert]) {
534
+ border-radius: 12px;
535
+ }
536
+
215
537
  /* ---- Click-origin ripple (installed by the ripple primitive) ------------- */
216
- [data-ui='material'] :where([data-variant], [role='menuitem'], [role='option'], [role='tab']) {
538
+ [data-ui='material'] :where([data-variant]:not([data-badge]), [role='menuitem'], [role='option'], [role='tab']) {
217
539
  position: relative;
218
540
  overflow: hidden;
219
541
  }
542
+ /* A glow button draws its ring on ::after at the border edge; the ripple's
543
+ overflow:hidden would clip it, so let a glow button overflow. */
544
+ [data-ui='material'] :where([data-variant]:not([data-badge])[data-glow]) {
545
+ overflow: visible;
546
+ }
220
547
  [data-ui='material'] .flx-mat-ripple {
221
548
  position: absolute;
222
549
  border-radius: 50%;
223
- background: currentColor;
550
+ /* Overridable per-control via --flx-mat-ripple-color; defaults to the ink. */
551
+ background: var(--flx-mat-ripple-color, currentColor);
224
552
  opacity: 0;
225
553
  transform: scale(0);
226
554
  pointer-events: none;
@@ -242,4 +570,333 @@
242
570
  opacity: 0;
243
571
  }
244
572
  }
573
+
574
+ /* ---- Progress: M3 linear (4px, tonal track) ------------------------------- */
575
+ [data-ui='material'] :where([role='progressbar']:not([data-circular])) {
576
+ height: 4px;
577
+ background: var(--flx-ui-color-primary-subtle);
578
+ }
579
+ [data-ui='material'] :where([role='progressbar']:not([data-circular]))::after {
580
+ background: var(--flx-ui-color-primary);
581
+ }
582
+
583
+ /* ---- Slider: M3 (thin tonal track, filled active range) ------------------- */
584
+ [data-ui='material'] :where([data-slider-track]) {
585
+ height: 4px;
586
+ background: var(--flx-ui-color-primary-subtle);
587
+ }
588
+ [data-ui='material'] :where([data-slider-range]) {
589
+ background: var(--flx-ui-color-primary);
590
+ }
591
+
592
+ /* ---- Badge: M3 label (medium weight, subtle tracking) --------------------- */
593
+ [data-ui='material'] :where([data-badge]) {
594
+ font-weight: var(--flx-ui-font-weight-medium);
595
+ letter-spacing: 0.02em;
596
+ }
597
+
598
+ /* ---- Avatar: M3 rounded-square option stays circular; add tonal ring ------ */
599
+ [data-ui='material'] :where([data-avatar]) {
600
+ font-weight: var(--flx-ui-font-weight-medium);
601
+ }
602
+
603
+ /* ---- Statistic: M3 display number (tighter tracking) ---------------------- */
604
+ [data-ui='material'] :where([data-statistic-value]) {
605
+ font-weight: var(--flx-ui-font-weight-semibold);
606
+ letter-spacing: -0.01em;
607
+ }
608
+ [data-ui='material'] :where([data-statistic-label]) {
609
+ letter-spacing: 0.06em;
610
+ }
611
+
612
+ /* ---- Empty: M3 icon tile (rounded-large, tonal) --------------------------- */
613
+ [data-ui='material'] :where([data-empty-icon]) {
614
+ width: 48px;
615
+ height: 48px;
616
+ border-radius: 16px;
617
+ background: var(--flx-ui-color-primary-subtle);
618
+ color: var(--flx-ui-color-primary);
619
+ }
620
+
621
+ /* ---- Timeline: M3 dot state-layer ---------------------------------------- */
622
+ [data-ui='material'] :where([data-timeline-indicator]:empty)::before {
623
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--flx-timeline-dot) 14%, transparent);
624
+ }
625
+
626
+ /* ---- Descriptions: M3 term (medium, tracked) ------------------------------ */
627
+ [data-ui='material'] :where([data-descriptions-term]) {
628
+ font-weight: var(--flx-ui-font-weight-medium);
629
+ letter-spacing: 0.04em;
630
+ text-transform: uppercase;
631
+ font-size: var(--flx-ui-font-size-2xs, 11px);
632
+ }
633
+
634
+ /* ---- Switch: Material (thin track, prominent thumb, ripple state-layer) ---- */
635
+ [data-ui='material'] :where([role='switch']) {
636
+ width: 34px;
637
+ height: 14px;
638
+ padding: 0;
639
+ border: none;
640
+ overflow: visible;
641
+ position: relative;
642
+ border-radius: 999px;
643
+ background: color-mix(in srgb, var(--flx-ui-color-fg) 26%, transparent);
644
+ }
645
+ [data-ui='material'] :where([role='switch'][data-state='checked']) {
646
+ background: color-mix(in srgb, var(--flx-ui-color-primary) 50%, transparent);
647
+ filter: none;
648
+ }
649
+ [data-ui='material'] :where([role='switch']:hover:not([data-disabled])) {
650
+ filter: none;
651
+ }
652
+ /* Thumb — 20px circle, larger than the 14px track so it overlaps it. */
653
+ [data-ui='material'] :where([role='switch'])::after {
654
+ content: '';
655
+ position: absolute;
656
+ top: 50%;
657
+ left: 0;
658
+ width: 20px;
659
+ height: 20px;
660
+ margin: 0;
661
+ border-radius: 50%;
662
+ background: #fff;
663
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
664
+ transform: translate(-2px, -50%);
665
+ transition:
666
+ transform var(--flx-ui-duration-normal) var(--flx-ui-ease-emphasized),
667
+ background var(--flx-ui-duration-fast) var(--flx-ui-ease-standard);
668
+ }
669
+ [data-ui='material'] :where([role='switch'][data-state='checked'])::after {
670
+ background: var(--flx-ui-color-primary);
671
+ transform: translate(16px, -50%);
672
+ }
673
+ /* Ripple / state-layer — a translucent disc behind the thumb, following it. */
674
+ [data-ui='material'] :where([role='switch'])::before {
675
+ content: '';
676
+ position: absolute;
677
+ top: 50%;
678
+ left: 0;
679
+ width: 40px;
680
+ height: 40px;
681
+ border-radius: 50%;
682
+ background: var(--flx-ui-color-fg);
683
+ opacity: 0;
684
+ pointer-events: none;
685
+ transform: translate(-12px, -50%) scale(0.7);
686
+ transition:
687
+ opacity var(--flx-ui-duration-fast) var(--flx-ui-ease-standard),
688
+ transform var(--flx-ui-duration-normal) var(--flx-ui-ease-emphasized);
689
+ }
690
+ [data-ui='material'] :where([role='switch'][data-state='checked'])::before {
691
+ background: var(--flx-ui-color-primary);
692
+ transform: translate(6px, -50%) scale(0.7);
693
+ }
694
+ [data-ui='material'] :where([role='switch']:hover:not([data-disabled]))::before {
695
+ opacity: 0.09;
696
+ transform: translate(-12px, -50%) scale(1);
697
+ }
698
+ [data-ui='material'] :where([role='switch'][data-state='checked']:hover:not([data-disabled]))::before {
699
+ transform: translate(6px, -50%) scale(1);
700
+ }
701
+ [data-ui='material'] :where([role='switch']:active:not([data-disabled]))::before {
702
+ opacity: 0.18;
703
+ }
704
+
705
+ /* ---- Slider thumb: Material filled handle + ripple state-layer ------------- */
706
+ [data-ui='material'] :where([data-slider] [role='slider']) {
707
+ background: var(--flx-ui-color-primary);
708
+ border-color: var(--flx-ui-color-primary);
709
+ }
710
+ [data-ui='material'] :where([data-slider] [role='slider'])::before {
711
+ content: '';
712
+ position: absolute;
713
+ top: 50%;
714
+ left: 50%;
715
+ width: 40px;
716
+ height: 40px;
717
+ border-radius: 50%;
718
+ background: var(--flx-ui-color-primary);
719
+ opacity: 0;
720
+ pointer-events: none;
721
+ transform: translate(-50%, -50%) scale(0.4);
722
+ transition:
723
+ opacity var(--flx-ui-duration-fast) var(--flx-ui-ease-standard),
724
+ transform var(--flx-ui-duration-normal) var(--flx-ui-ease-emphasized);
725
+ }
726
+ [data-ui='material'] :where([data-slider] [role='slider']:hover:not([data-disabled]))::before {
727
+ opacity: 0.12;
728
+ transform: translate(-50%, -50%) scale(1);
729
+ }
730
+ [data-ui='material'] :where([data-slider] [role='slider']:active)::before,
731
+ [data-ui='material'] :where([data-slider] [role='slider']:focus-visible)::before {
732
+ opacity: 0.2;
733
+ transform: translate(-50%, -50%) scale(1);
734
+ }
735
+
736
+ /* ---- Popup surfaces: one consistent M3 shape (small radius, tight elevation)
737
+ * Unifies every floating surface — menus, listboxes, datepicker, command,
738
+ * hovercard, nav-menu — which previously ranged from radius-md (12px) to
739
+ * radius-lg (16px) with a heavy shadow-lg. Tooltip already matches at 4px. */
740
+ [data-ui='material'] :where(
741
+ [role='menu'],
742
+ [role='listbox'],
743
+ [data-date-picker-content],
744
+ [data-navigation-menu-content],
745
+ [data-command],
746
+ [data-hovercard-content]
747
+ ) {
748
+ border-radius: 4px;
749
+ box-shadow:
750
+ 0 2px 6px rgba(0, 0, 0, 0.16),
751
+ 0 1px 3px rgba(0, 0, 0, 0.1);
752
+ }
753
+
754
+ /* ---- Checkbox & radio: M3 state-layer ripple -------------------------------
755
+ * The ripple lives on ::before at z-index:-1 so it paints ABOVE the control's
756
+ * background but BELOW its content (the base check/dot on ::after). This leaves
757
+ * the base marks completely untouched — do NOT restyle ::after here, the base
758
+ * check is a flex-centred rotated border and the radio dot is position:absolute;
759
+ * inset:3px, both of which break if position/box-sizing is overridden. */
760
+ [data-ui='material'] :where([role='checkbox']),
761
+ [data-ui='material'] :where([role='radio']) {
762
+ position: relative;
763
+ overflow: visible;
764
+ }
765
+ [data-ui='material'] :where([role='checkbox'])::before,
766
+ [data-ui='material'] :where([role='radio'])::before {
767
+ content: '';
768
+ position: absolute;
769
+ z-index: -1;
770
+ top: 50%;
771
+ left: 50%;
772
+ width: 40px;
773
+ height: 40px;
774
+ border-radius: 50%;
775
+ background: var(--flx-ui-color-primary);
776
+ opacity: 0;
777
+ pointer-events: none;
778
+ transform: translate(-50%, -50%) scale(0.5);
779
+ transition:
780
+ opacity var(--flx-ui-duration-fast) var(--flx-ui-ease-standard),
781
+ transform var(--flx-ui-duration-normal) var(--flx-ui-ease-emphasized);
782
+ }
783
+ [data-ui='material'] :where([role='checkbox']:hover:not([data-disabled]))::before,
784
+ [data-ui='material'] :where([role='radio']:hover:not([data-disabled]))::before {
785
+ opacity: 0.1;
786
+ transform: translate(-50%, -50%) scale(1);
787
+ }
788
+ [data-ui='material'] :where([role='checkbox']:active:not([data-disabled]))::before,
789
+ [data-ui='material'] :where([role='radio']:active:not([data-disabled]))::before,
790
+ [data-ui='material'] :where([role='checkbox']:focus-visible)::before,
791
+ [data-ui='material'] :where([role='radio']:focus-visible)::before {
792
+ opacity: 0.18;
793
+ transform: translate(-50%, -50%) scale(1);
794
+ }
795
+
796
+ /* ---- Circular progress: 4dp tonal track, round cap (matches linear) ------ */
797
+ [data-ui='material'] :where([data-progress-track]) {
798
+ stroke: var(--flx-ui-color-primary-subtle);
799
+ }
800
+ [data-ui='material'] :where([data-progress-indicator]) {
801
+ stroke-linecap: round;
802
+ }
803
+
804
+ /* ---- Avatar group: tonal secondary-container overflow chip --------------- */
805
+ [data-ui='material'] :where([data-avatar-group-overflow]) {
806
+ background: var(--flx-ui-color-primary-subtle);
807
+ color: var(--flx-ui-color-primary-active);
808
+ }
809
+
810
+ /* ---- Rating: filled primary stars, roomier M3 spacing ------------------- */
811
+ [data-ui='material'] :where([data-rating]) {
812
+ --flx-ui-rating-gap: 4px;
813
+ --flx-ui-rating-color: var(--flx-ui-color-primary);
814
+ }
815
+
816
+ /* ---- PIN input: M3 filled cells with the shared underline treatment ------ */
817
+ [data-ui='material'] :where([data-pin-input-field]) {
818
+ background: var(--flx-ui-color-bg-muted);
819
+ border: none;
820
+ border-bottom: 1px solid var(--flx-ui-color-border-strong);
821
+ border-radius: 4px 4px 0 0;
822
+ }
823
+ [data-ui='material'] :where([data-pin-input-field]:focus, [data-pin-input-field]:focus-visible) {
824
+ border-bottom: 2px solid var(--flx-ui-color-primary);
825
+ box-shadow: none;
826
+ outline: none;
827
+ }
828
+
829
+ /* ---- Icon button: M3 round, size-aware (overrides the fixed 40px pill) ---- */
830
+ [data-ui='material'] :where([data-icon-button]) {
831
+ padding: 0;
832
+ width: var(--flx-ui-size-md);
833
+ height: var(--flx-ui-size-md);
834
+ border-radius: 9999px;
835
+ }
836
+ [data-ui='material'] :where([data-icon-button][data-size='sm']) {
837
+ width: var(--flx-ui-size-sm);
838
+ height: var(--flx-ui-size-sm);
839
+ }
840
+ [data-ui='material'] :where([data-icon-button][data-size='lg']) {
841
+ width: var(--flx-ui-size-lg);
842
+ height: var(--flx-ui-size-lg);
843
+ }
844
+
845
+ /* ---- FAB: M3 primary-container, resting elevation, larger radius. Re-assert
846
+ the FAB geometry the fixed-40px button rule above would otherwise impose. */
847
+ [data-ui='material'] :where([data-fab]) {
848
+ width: 56px;
849
+ height: 56px;
850
+ padding: 0;
851
+ border-radius: 16px;
852
+ background: var(--flx-ui-color-primary-subtle);
853
+ color: var(--flx-ui-color-primary-active);
854
+ box-shadow: var(--flx-ui-shadow-md);
855
+ }
856
+ [data-ui='material'] :where([data-fab]:hover:not([data-disabled])) {
857
+ box-shadow: var(--flx-ui-shadow-lg);
858
+ }
859
+ [data-ui='material'] :where([data-fab][data-fab-size='sm']) { width: 40px; height: 40px; border-radius: 12px; }
860
+ [data-ui='material'] :where([data-fab][data-fab-size='lg']) { width: 64px; height: 64px; border-radius: 28px; }
861
+ [data-ui='material'] :where([data-fab][data-fab-extended]) {
862
+ width: auto;
863
+ height: 56px;
864
+ padding: 0 20px;
865
+ border-radius: 16px;
866
+ }
867
+ /* A solid-toned FAB keeps the primary fill instead of the tonal container. */
868
+ [data-ui='material'] :where([data-fab][data-variant='solid']) {
869
+ background: var(--flx-ui-color-primary);
870
+ color: var(--flx-ui-color-primary-fg);
871
+ }
872
+
873
+ /* ---- Speed dial: elevated action buttons -------------------------------- */
874
+ [data-ui='material'] :where([data-speed-dial-action]) {
875
+ box-shadow: var(--flx-ui-shadow-sm);
876
+ }
877
+
878
+ /* ---- Carousel: M3 expanding indicators + circular controls -------------- */
879
+ [data-ui='material'] :where([data-carousel-dot]) {
880
+ border-radius: var(--flx-ui-radius-full, 999px);
881
+ transition: width var(--flx-ui-duration-normal, 250ms) var(--flx-ui-ease-standard, ease),
882
+ background var(--flx-ui-duration-fast) var(--flx-ui-ease-standard);
883
+ }
884
+ /* Active indicator grows into a pill, à la M3 carousels. */
885
+ [data-ui='material'] :where([data-carousel-dot][data-active]) {
886
+ width: 24px;
887
+ background: var(--flx-ui-color-primary);
888
+ }
889
+ [data-ui='material'] :where([data-carousel-prev], [data-carousel-next]) {
890
+ display: inline-grid;
891
+ place-items: center;
892
+ inline-size: 40px;
893
+ block-size: 40px;
894
+ border: 0;
895
+ border-radius: var(--flx-ui-radius-full, 999px);
896
+ background: var(--flx-ui-color-bg-muted);
897
+ color: var(--flx-ui-color-fg);
898
+ }
899
+ [data-ui='material'] :where([data-carousel-prev]:hover:not([disabled]), [data-carousel-next]:hover:not([disabled])) {
900
+ background: color-mix(in srgb, var(--flx-ui-color-fg) 8%, var(--flx-ui-color-bg-muted));
901
+ }
245
902
  }
@@ -0,0 +1,8 @@
1
+ const href = new URL('./material.css', import.meta.url).href;
2
+ if (typeof document !== 'undefined' && !document.querySelector(`link[data-flx-ui="${href}"]`)) {
3
+ const link = document.createElement('link');
4
+ link.rel = 'stylesheet';
5
+ link.href = href;
6
+ link.dataset.flxUi = href;
7
+ document.head.appendChild(link);
8
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluixi-ui/skin-material",
3
- "version": "0.2.1-alpha.1",
3
+ "version": "0.3.0-alpha.11",
4
4
  "description": "Material Design skin for Fluixi UI — activate with data-ui=\"material\"",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -21,6 +21,7 @@
21
21
  "dist",
22
22
  "fonts",
23
23
  "material.css",
24
+ "material.css.js",
24
25
  "README.md",
25
26
  "LICENSE"
26
27
  ],
@@ -34,6 +35,6 @@
34
35
  }
35
36
  },
36
37
  "scripts": {
37
- "build": "tsc -p tsconfig.lib.json"
38
+ "build": "tsc -p tsconfig.lib.json && node ../../scripts/css-loaders.mjs material.css"
38
39
  }
39
40
  }