Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 61 additions & 60 deletions docs/app/js/sanddance-app.js

Large diffs are not rendered by default.

Binary file not shown.
2 changes: 1 addition & 1 deletion docs/examples/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ title: Examples

## <a name="apps"></a>SandDance apps v4
* [Web app](../tests/v4/es6/app)
* [Power BI custom visual](../dist/powerbi/v4/SandDance201929976D117A654D0BAB8E96507442D80B.4.2.0.1.pbiviz) 4.2.0.1
* [Power BI custom visual](../dist/powerbi/v4/SandDance201929976D117A654D0BAB8E96507442D80B.4.2.0.2.pbiviz) 4.2.0.2
* [Azure Data Studio extension](../dist/azdata/v4/azdata-sanddance-4.1.1.vsix) 4.1.1
* [VSCode extension](../dist/vscode/v4/vscode-sanddance-4.1.0.vsix) 4.1.0
* [sanddance-embed example](../embed/v4/test.html)
Expand Down
121 changes: 61 additions & 60 deletions docs/tests/v4/es6/js/sanddance-app.js

Large diffs are not rendered by default.

50 changes: 25 additions & 25 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -1,41 +1,41 @@
import { defineConfig } from "eslint/config";
import react from "eslint-plugin-react";
import typescriptEslint from "@typescript-eslint/eslint-plugin";
import globals from "globals";
import tsParser from "@typescript-eslint/parser";
import path from "node:path";
import { fileURLToPath } from "node:url";
import js from "@eslint/js";
import { FlatCompat } from "@eslint/eslintrc";
import { defineConfig } from 'eslint/config';
import react from 'eslint-plugin-react';
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import globals from 'globals';
import tsParser from '@typescript-eslint/parser';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import js from '@eslint/js';
import { FlatCompat } from '@eslint/eslintrc';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
allConfig: js.configs.all,
});

export default defineConfig([{
extends: compat.extends("eslint:recommended", "plugin:@typescript-eslint/eslint-recommended"),
extends: compat.extends('eslint:recommended', 'plugin:@typescript-eslint/eslint-recommended'),

plugins: {
react,
"@typescript-eslint": typescriptEslint,
'@typescript-eslint': typescriptEslint,
},

languageOptions: {
globals: {
...globals.browser,
...globals.mocha,
...globals.node,
Atomics: "readonly",
SharedArrayBuffer: "readonly",
Atomics: 'readonly',
SharedArrayBuffer: 'readonly',
},

parser: tsParser,
ecmaVersion: 2018,
sourceType: "module",
sourceType: 'module',

parserOptions: {
ecmaFeatures: {
Expand All @@ -45,19 +45,19 @@ export default defineConfig([{
},

rules: {
"comma-dangle": ["error", "always-multiline"],
"no-inner-declarations": ["off"],
"no-mixed-spaces-and-tabs": ["off"],
"no-prototype-builtins": ["off"],
'comma-dangle': ['error', 'always-multiline'],
'no-inner-declarations': ['off'],
'no-mixed-spaces-and-tabs': ['off'],
'no-prototype-builtins': ['off'],

indent: ["error", 4, {
'indent': ['error', 4, {
SwitchCase: 1,
}],

"no-unused-vars": ["off"],
"prefer-spread": ["off"],
"quote-props": ["error", "consistent-as-needed"],
quotes: ["error", "single"],
semi: ["error", "always"],
'no-unused-vars': ['off'],
'prefer-spread': ['off'],
'quote-props': ['error', 'consistent-as-needed'],
'quotes': ['error', 'single'],
'semi': ['error', 'always'],
},
}]);
4 changes: 2 additions & 2 deletions extensions/azdata-sanddance/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@
"webpack-dev": "webpack --mode development --watch",
"resources": "node ../common-frontend/scripts/resources.js",
"compile": "tsc -p ./",
"build:08": "npm run compile && npm run resources",
"x-build:08": "npm run compile && npm run resources",
"x-test": "npm run compile && node ./node_modules/vscode/bin/test",
"x-deploy": "node ./scripts/deploy.js",
"build:09": "vsce package"
"x-build:09": "vsce package"
}
}
4 changes: 4 additions & 0 deletions packages/fluentui-icons/config/fabric-icons.json
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@
"name": "HourGlass",
"unicode": "EA03"
},
{
"name": "More",
"unicode": "E712"
},
{
"name": "Next",
"unicode": "E893"
Expand Down
3 changes: 2 additions & 1 deletion packages/fluentui-icons/css/fabric-icons-inline.css

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion packages/fluentui-icons/css/fabric-icons.css
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
*/
@font-face {
font-family: 'FabricMDL2Icons';
src: url('../fonts/fabric-icons-994712d3.woff') format('woff');
src: url('../fonts/fabric-icons-4ac17eec.woff') format('woff');
}

.ms-Icon {
Expand Down Expand Up @@ -44,6 +44,7 @@
.ms-Icon--Flow:before { content: "\EF90"; }
.ms-Icon--History:before { content: "\E81C"; }
.ms-Icon--HourGlass:before { content: "\EA03"; }
.ms-Icon--More:before { content: "\E712"; }
.ms-Icon--Next:before { content: "\E893"; }
.ms-Icon--OpenInNewWindow:before { content: "\E8A7"; }
.ms-Icon--Page:before { content: "\E7C3"; }
Expand Down
14 changes: 14 additions & 0 deletions packages/fluentui-icons/fabric-icons.html
Original file line number Diff line number Diff line change
Expand Up @@ -439,6 +439,20 @@ <h1 class="ms-font-su">fabric-icons</h1>
</div>
</div>

<div class="IconContainer" title="More - E712">
<div class="IconContainer-icon">
<i class="ms-Icon ms-Icon--More"></i>
</div>

<div class="IconContainer-name ms-font-l">
More
</div>

<div class="IconContainer-unicode ms-font-s">
E712
</div>
</div>

<div class="IconContainer" title="Next - E893">
<div class="IconContainer-icon">
<i class="ms-Icon ms-Icon--Next"></i>
Expand Down
Binary file not shown.
Binary file not shown.
2 changes: 1 addition & 1 deletion packages/fluentui-icons/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@msrvida/fluentui-icons",
"version": "1.0.2",
"version": "1.1.1",
"description": "Fluent UI icons for use in MsrVida data visualization applications.",
"main": "dist/es6/index.js",
"types": "dist/es6/index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/fluentui-icons/scripts/prebuild.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ fs.readdirSync('./fonts').forEach(file => {

// Create TypeScript file with the base64 data using constant export name
const tsContent = `// Auto-generated font data - do not edit manually
export const fabricIconsWoff = "${base64Font}";
export const fabricIconsWoff = '${base64Font}';
`;

fs.writeFileSync(`./src/${fileName}.ts`, tsContent);
Expand Down
141 changes: 71 additions & 70 deletions packages/fluentui-icons/src/fabric-icons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,77 +3,78 @@
// tslint:disable:max-line-length

import { IIconSubset } from '@uifabric/styling';
import { fabricIconsWoff } from './fabric_icons_994712d3';
import { fabricIconsWoff } from './fabric_icons_4ac17eec';

export function initializeIcons() {
const subset: IIconSubset = {
style: {
MozOsxFontSmoothing: 'grayscale',
WebkitFontSmoothing: 'antialiased',
fontStyle: 'normal',
fontWeight: 'normal',
speak: 'none'
},
fontFace: {
fontFamily: `"FabricMDL2Icons"`,
src: `url("${fabricIconsWoff}") format("woff")`,
},
icons: {
'Accept': '\uE8FB',
'Add': '\uE710',
'BIDashboard': '\uF543',
'Camera': '\uE722',
'Cancel': '\uE711',
'ChevronDown': '\uE70D',
'ChevronLeftMed': '\uE973',
'ChevronRightMed': '\uE974',
'Clear': '\uE894',
'ClearFilter': '\uEF8F',
'ClearNight': '\uE9C2',
'CloudDownload': '\uEBD3',
'Color': '\uE790',
'Copy': '\uE8C8',
'CubeShape': '\uF1AA',
'Delete': '\uE74D',
'Diamond': '\uED02',
'DiamondSolid': '\uF34C',
'DoubleChevronLeft12': '\uEE98',
'DoubleChevronRight12': '\uEE99',
'Download': '\uE896',
'Edit': '\uE70F',
'Filter': '\uE71C',
'Filters': '\uE795',
'FiltersSolid': '\uF353',
'Flow': '\uEF90',
'History': '\uE81C',
'HourGlass': '\uEA03',
'Next': '\uE893',
'OpenInNewWindow': '\uE8A7',
'Page': '\uE7C3',
'Pause': '\uE769',
'Photo2Add': '\uECAB',
'Photo2Remove': '\uECAC',
'PicturePosition': '\uF524',
'Pin': '\uE718',
'Pinned': '\uE840',
'PlayResume': '\uF2C6',
'PlayReverseResume': '\uF3E4',
'Previous': '\uE892',
'RadioBtnOff': '\uECCA',
'RadioBtnOn': '\uECCB',
'RadioBullet': '\uE915',
'Redo': '\uE7A6',
'RemoveFilter': '\uEB08',
'ScaleVolume': '\uF18C',
'Search': '\uE721',
'Settings': '\uE713',
'SortDown': '\uEE69',
'SortUp': '\uEE68',
'Sunny': '\uE9BD',
'Table': '\uED86',
'Undo': '\uE7A7'
}
};
const subset: IIconSubset = {
style: {
MozOsxFontSmoothing: 'grayscale',
WebkitFontSmoothing: 'antialiased',
fontStyle: 'normal',
fontWeight: 'normal',
speak: 'none',
},
fontFace: {
fontFamily: '"FabricMDL2Icons"',
src: `url("${fabricIconsWoff}") format("woff")`,
},
icons: {
Accept: '\uE8FB',
Add: '\uE710',
BIDashboard: '\uF543',
Camera: '\uE722',
Cancel: '\uE711',
ChevronDown: '\uE70D',
ChevronLeftMed: '\uE973',
ChevronRightMed: '\uE974',
Clear: '\uE894',
ClearFilter: '\uEF8F',
ClearNight: '\uE9C2',
CloudDownload: '\uEBD3',
Color: '\uE790',
Copy: '\uE8C8',
CubeShape: '\uF1AA',
Delete: '\uE74D',
Diamond: '\uED02',
DiamondSolid: '\uF34C',
DoubleChevronLeft12: '\uEE98',
DoubleChevronRight12: '\uEE99',
Download: '\uE896',
Edit: '\uE70F',
Filter: '\uE71C',
Filters: '\uE795',
FiltersSolid: '\uF353',
Flow: '\uEF90',
History: '\uE81C',
HourGlass: '\uEA03',
More: '\uE712',
Next: '\uE893',
OpenInNewWindow: '\uE8A7',
Page: '\uE7C3',
Pause: '\uE769',
Photo2Add: '\uECAB',
Photo2Remove: '\uECAC',
PicturePosition: '\uF524',
Pin: '\uE718',
Pinned: '\uE840',
PlayResume: '\uF2C6',
PlayReverseResume: '\uF3E4',
Previous: '\uE892',
RadioBtnOff: '\uECCA',
RadioBtnOn: '\uECCB',
RadioBullet: '\uE915',
Redo: '\uE7A6',
RemoveFilter: '\uEB08',
ScaleVolume: '\uF18C',
Search: '\uE721',
Settings: '\uE713',
SortDown: '\uEE69',
SortUp: '\uEE68',
Sunny: '\uE9BD',
Table: '\uED86',
Undo: '\uE7A7',
},
};

return subset;
return subset;
}
2 changes: 2 additions & 0 deletions packages/fluentui-icons/src/fabric_icons_4ac17eec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Auto-generated font data - do not edit manually
export const fabricIconsWoff = 'data:font/woff;base64,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';
Loading